Hi Siddharth,

Thanks for this, but I think we need a better shortlog and commit
message explaining why we need this additional patch.

Could you send a v3?

Thanks!

Steve

On Thu, May 11, 2023 at 11:28 AM Siddharth <sdo...@mvista.com> wrote:
>
> Upstream-Status: Backport from 
> [https://github.com/curl/curl/commit/4e2b52b5f7a3bf50a0f1494155717b02cc1df6d6]
>
> Signed-off-by: Hitendra Prajapati <hprajap...@mvista.com>
> Signed-off-by: Siddharth Doshi <sdo...@mvista.com>
> ---
>  .../curl/curl/CVE-2023-27534-pre1.patch       |  44 +++++++
>  .../curl/curl/CVE-2023-27534.patch            | 122 +++---------------
>  meta/recipes-support/curl/curl_7.69.1.bb      |   1 +
>  3 files changed, 61 insertions(+), 106 deletions(-)
>  create mode 100644 meta/recipes-support/curl/curl/CVE-2023-27534-pre1.patch
>
> diff --git a/meta/recipes-support/curl/curl/CVE-2023-27534-pre1.patch 
> b/meta/recipes-support/curl/curl/CVE-2023-27534-pre1.patch
> new file mode 100644
> index 0000000000..98b25a2fe5
> --- /dev/null
> +++ b/meta/recipes-support/curl/curl/CVE-2023-27534-pre1.patch
> @@ -0,0 +1,44 @@
> +From 6c51adeb71da076c5c40a45e339e06bb4394a86b Mon Sep 17 00:00:00 2001
> +From: Eric Vigeant <evige...@gmail.com>
> +Date: Wed, 2 Nov 2022 11:47:09 -0400
> +Subject: [PATCH] cur_path: do not add '/' if homedir ends with one
> +
> +When using SFTP and a path relative to the user home, do not add a
> +trailing '/' to the user home dir if it already ends with one.
> +
> +Closes #9844
> +
> +CVE: CVE-2023-27534
> +Note: This patch is needed to backport CVE-2023-27534
> +Upstream-Status: Backport from 
> [https://github.com/curl/curl/commit/6c51adeb71da076c5c40a45e339e06bb4394a86b]
> +
> +Signed-off-by: Siddharth Doshi <sdo...@mvista.com>
> +---
> + lib/curl_path.c | 10 +++++++---
> + 1 file changed, 7 insertions(+), 3 deletions(-)
> +
> +diff --git a/lib/curl_path.c b/lib/curl_path.c
> +index f429634..40b92ee 100644
> +--- a/lib/curl_path.c
> ++++ b/lib/curl_path.c
> +@@ -70,10 +70,14 @@ CURLcode Curl_getworkingpath(struct connectdata *conn,
> +       /* It is referenced to the home directory, so strip the
> +          leading '/' */
> +       memcpy(real_path, homedir, homelen);
> +-      real_path[homelen] = '/';
> +-      real_path[homelen + 1] = '\0';
> ++      /* Only add a trailing '/' if homedir does not end with one */
> ++      if(homelen == 0 || real_path[homelen - 1] != '/') {
> ++        real_path[homelen] = '/';
> ++        homelen++;
> ++        real_path[homelen] = '\0';
> ++      }
> +       if(working_path_len > 3) {
> +-        memcpy(real_path + homelen + 1, working_path + 3,
> ++        memcpy(real_path + homelen, working_path + 3,
> +                1 + working_path_len -3);
> +       }
> +     }
> +--
> +2.24.4
> +
> diff --git a/meta/recipes-support/curl/curl/CVE-2023-27534.patch 
> b/meta/recipes-support/curl/curl/CVE-2023-27534.patch
> index aeeffd5fea..3ecd181290 100644
> --- a/meta/recipes-support/curl/curl/CVE-2023-27534.patch
> +++ b/meta/recipes-support/curl/curl/CVE-2023-27534.patch
> @@ -3,121 +3,31 @@ From: Daniel Stenberg <dan...@haxx.se>
>  Date: Thu, 9 Mar 2023 16:22:11 +0100
>  Subject: [PATCH] curl_path: create the new path with dynbuf
>
> +Closes #10729
> +
>  CVE: CVE-2023-27534
> -Upstream-Status: Backport 
> [https://github.com/curl/curl/commit/4e2b52b5f7a3bf50a0f1494155717b02cc1df6d6]
> +Note: This patch is needed to backport CVE-2023-27534
> +Upstream-Status: Backport from 
> [https://github.com/curl/curl/commit/4e2b52b5f7a3bf50a0f1494155717b02cc1df6d6]
>
>  Signed-off-by: Hitendra Prajapati <hprajap...@mvista.com>
> +Signed-off-by: Siddharth Doshi <sdo...@mvista.com>
>  ---
> - lib/curl_path.c | 71 ++++++++++++++++++++++++-------------------------
> - 1 file changed, 35 insertions(+), 36 deletions(-)
> + lib/curl_path.c | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
>
>  diff --git a/lib/curl_path.c b/lib/curl_path.c
> -index f429634..e17db4b 100644
> +index 40b92ee..598c5dd 100644
>  --- a/lib/curl_path.c
>  +++ b/lib/curl_path.c
> -@@ -30,6 +30,8 @@
> - #include "escape.h"
> - #include "memdebug.h"
> -
> -+#define MAX_SSHPATH_LEN 100000 /* arbitrary */
> -+
> - /* figure out the path to work with in this particular request */
> - CURLcode Curl_getworkingpath(struct connectdata *conn,
> -                              char *homedir,  /* when SFTP is used */
> -@@ -37,60 +39,57 @@ CURLcode Curl_getworkingpath(struct connectdata *conn,
> -                                              real path to work with */
> - {
> -   struct Curl_easy *data = conn->data;
> --  char *real_path = NULL;
> -   char *working_path;
> -   size_t working_path_len;
> -+  struct dynbuf npath;
> -   CURLcode result =
> -     Curl_urldecode(data, data->state.up.path, 0, &working_path,
> -                    &working_path_len, FALSE);
> -   if(result)
> -     return result;
> -
> -+  /* new path to switch to in case we need to */
> -+  Curl_dyn_init(&npath, MAX_SSHPATH_LEN);
> -+
> -   /* Check for /~/, indicating relative to the user's home directory */
> --  if(conn->handler->protocol & CURLPROTO_SCP) {
> --    real_path = malloc(working_path_len + 1);
> --    if(real_path == NULL) {
> -+  if((data->conn->handler->protocol & CURLPROTO_SCP) &&
> -+     (working_path_len > 3) && (!memcmp(working_path, "/~/", 3))) {
> -+    /* It is referenced to the home directory, so strip the leading '/~/' */
> -+    if(Curl_dyn_addn(&npath, &working_path[3], working_path_len - 3)) {
> -       free(working_path);
> -       return CURLE_OUT_OF_MEMORY;
> -     }
> --    if((working_path_len > 3) && (!memcmp(working_path, "/~/", 3)))
> --      /* It is referenced to the home directory, so strip the leading '/~/' 
> */
> --      memcpy(real_path, working_path + 3, working_path_len - 2);
> --    else
> --      memcpy(real_path, working_path, 1 + working_path_len);
> +@@ -60,7 +60,7 @@ CURLcode Curl_getworkingpath(struct connectdata *conn,
> +       memcpy(real_path, working_path, 1 + working_path_len);
>     }
> --  else if(conn->handler->protocol & CURLPROTO_SFTP) {
> +   else if(conn->handler->protocol & CURLPROTO_SFTP) {
>  -    if((working_path_len > 1) && (working_path[1] == '~')) {
> --      size_t homelen = strlen(homedir);
> --      real_path = malloc(homelen + working_path_len + 1);
> --      if(real_path == NULL) {
> --        free(working_path);
> --        return CURLE_OUT_OF_MEMORY;
> --      }
> --      /* It is referenced to the home directory, so strip the
> --         leading '/' */
> --      memcpy(real_path, homedir, homelen);
> --      real_path[homelen] = '/';
> --      real_path[homelen + 1] = '\0';
> --      if(working_path_len > 3) {
> --        memcpy(real_path + homelen + 1, working_path + 3,
> --               1 + working_path_len -3);
> --      }
> -+  else if((data->conn->handler->protocol & CURLPROTO_SFTP) &&
> -+          (working_path_len > 2) && !memcmp(working_path, "/~/", 3)) {
> -+    size_t len;
> -+    const char *p;
> -+    int copyfrom = 3;
> -+    if(Curl_dyn_add(&npath, homedir)) {
> -+      free(working_path);
> -+      return CURLE_OUT_OF_MEMORY;
> -     }
> --    else {
> --      real_path = malloc(working_path_len + 1);
> --      if(real_path == NULL) {
> --        free(working_path);
> --        return CURLE_OUT_OF_MEMORY;
> --      }
> --      memcpy(real_path, working_path, 1 + working_path_len);
> -+    /* Copy a separating '/' if homedir does not end with one */
> -+    len = Curl_dyn_len(&npath);
> -+    p = Curl_dyn_ptr(&npath);
> -+    if(len && (p[len-1] != '/'))
> -+      copyfrom = 2;
> -+
> -+    if(Curl_dyn_addn(&npath,
> -+                     &working_path[copyfrom], working_path_len - copyfrom)) 
> {
> -+      free(working_path);
> -+      return CURLE_OUT_OF_MEMORY;
> -     }
> -   }
> -
> --  free(working_path);
> -+  if(Curl_dyn_len(&npath)) {
> -+    free(working_path);
> -
> --  /* store the pointer for the caller to receive */
> --  *path = real_path;
> -+    /* store the pointer for the caller to receive */
> -+    *path = Curl_dyn_ptr(&npath);
> -+  }
> -+  else
> -+    *path = working_path;
> -
> -   return CURLE_OK;
> - }
> ++    if((working_path_len > 2) && !memcmp(working_path, "/~/", 3)) {
> +       size_t homelen = strlen(homedir);
> +       real_path = malloc(homelen + working_path_len + 1);
> +       if(real_path == NULL) {
>  --
> -2.25.1
> +2.24.4
>
> diff --git a/meta/recipes-support/curl/curl_7.69.1.bb 
> b/meta/recipes-support/curl/curl_7.69.1.bb
> index 32d18ddb3a..13ec117099 100644
> --- a/meta/recipes-support/curl/curl_7.69.1.bb
> +++ b/meta/recipes-support/curl/curl_7.69.1.bb
> @@ -43,6 +43,7 @@ SRC_URI = "https://curl.haxx.se/download/curl-${PV}.tar.bz2 
> \
>             file://CVE-2022-35260.patch \
>             file://CVE-2022-43552.patch \
>             file://CVE-2023-23916.patch \
> +           file://CVE-2023-27534-pre1.patch \
>             file://CVE-2023-27534.patch \
>             file://CVE-2023-27538.patch \
>             file://CVE-2023-27533.patch \
> --
> 2.25.1
>
>
> 
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#181159): 
https://lists.openembedded.org/g/openembedded-core/message/181159
Mute This Topic: https://lists.openembedded.org/mt/98837360/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to