summaryrefslogtreecommitdiffstats
path: root/meta/recipes-support/curl/curl
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-support/curl/curl')
-rw-r--r--meta/recipes-support/curl/curl/0001-replace-krb5-config-with-pkg-config.patch44
-rw-r--r--meta/recipes-support/curl/curl/721941aadf4adf4f6aeb3f4c0ab489bb89610c36.patch64
-rw-r--r--meta/recipes-support/curl/curl/CVE-2019-5435.patch266
-rw-r--r--meta/recipes-support/curl/curl/CVE-2019-5436.patch30
-rw-r--r--meta/recipes-support/curl/curl/CVE-2019-5482.patch65
-rw-r--r--meta/recipes-support/curl/curl/disable-tests41
-rw-r--r--meta/recipes-support/curl/curl/no-test-timeout.patch25
-rw-r--r--meta/recipes-support/curl/curl/run-ptest13
8 files changed, 143 insertions, 405 deletions
diff --git a/meta/recipes-support/curl/curl/0001-replace-krb5-config-with-pkg-config.patch b/meta/recipes-support/curl/curl/0001-replace-krb5-config-with-pkg-config.patch
deleted file mode 100644
index a7db1b3c9e..0000000000
--- a/meta/recipes-support/curl/curl/0001-replace-krb5-config-with-pkg-config.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From ed70f0623708b8a6c1f58a5d243d87c5ff45b24d Mon Sep 17 00:00:00 2001
-From: Roy Li <rongqing.li@windriver.com>
-Date: Tue, 26 Apr 2016 13:13:01 +0800
-Subject: [PATCH] replace krb5-config with pkg-config
-
-Upstream-Status: Pending
-
-Signed-off-by: Roy Li <rongqing.li@windriver.com>
-
----
- configure.ac | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 5569a26..56b0380 100755
---- a/configure.ac
-+++ b/configure.ac
-@@ -1290,7 +1290,7 @@ AC_ARG_WITH(gssapi,
- fi
- ])
-
--: ${KRB5CONFIG:="$GSSAPI_ROOT/bin/krb5-config"}
-+KRB5CONFIG=`which pkg-config`
-
- save_CPPFLAGS="$CPPFLAGS"
- AC_MSG_CHECKING([if GSS-API support is requested])
-@@ -1301,7 +1301,7 @@ if test x"$want_gss" = xyes; then
- if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
- GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi`
- elif test -f "$KRB5CONFIG"; then
-- GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi`
-+ GSSAPI_INCS=`$KRB5CONFIG --cflags mit-krb5-gssapi`
- elif test "$GSSAPI_ROOT" != "yes"; then
- GSSAPI_INCS="-I$GSSAPI_ROOT/include"
- fi
-@@ -1394,7 +1394,7 @@ if test x"$want_gss" = xyes; then
- elif test -f "$KRB5CONFIG"; then
- dnl krb5-config doesn't have --libs-only-L or similar, put everything
- dnl into LIBS
-- gss_libs=`$KRB5CONFIG --libs gssapi`
-+ gss_libs=`$KRB5CONFIG --libs mit-krb5-gssapi`
- LIBS="$gss_libs $LIBS"
- else
- case $host in
diff --git a/meta/recipes-support/curl/curl/721941aadf4adf4f6aeb3f4c0ab489bb89610c36.patch b/meta/recipes-support/curl/curl/721941aadf4adf4f6aeb3f4c0ab489bb89610c36.patch
new file mode 100644
index 0000000000..98f7db93e8
--- /dev/null
+++ b/meta/recipes-support/curl/curl/721941aadf4adf4f6aeb3f4c0ab489bb89610c36.patch
@@ -0,0 +1,64 @@
+From 721941aadf4adf4f6aeb3f4c0ab489bb89610c36 Mon Sep 17 00:00:00 2001
+From: Stefan Eissing <stefan@eissing.org>
+Date: Mon, 1 Apr 2024 15:41:18 +0200
+Subject: [PATCH] http: with chunked POST forced, disable length check on read
+ callback
+
+- when an application forces HTTP/1.1 chunked transfer encoding
+ by setting the corresponding header and instructs curl to use
+ the CURLOPT_READFUNCTION, disregard any POST length information.
+- this establishes backward compatibility with previous curl versions
+
+Applications are encouraged to not force "chunked", but rather
+set length information for a POST. By setting -1, curl will
+auto-select chunked on HTTP/1.1 and work properly on other HTTP
+versions.
+
+Reported-by: Jeff King
+Fixes #13229
+Closes #13257
+Upstream-Status: Backport
+---
+ lib/http.c | 22 ++++++++++++++++++++--
+ 1 file changed, 20 insertions(+), 2 deletions(-)
+
+diff --git a/lib/http.c b/lib/http.c
+index 92c04e69cd8373..a764d3c4403c39 100644
+--- a/lib/http.c
++++ b/lib/http.c
+@@ -2046,8 +2046,19 @@ static CURLcode set_reader(struct Curl_easy *data, Curl_HttpReq httpreq)
+ else
+ result = Curl_creader_set_null(data);
+ }
+- else { /* we read the bytes from the callback */
+- result = Curl_creader_set_fread(data, postsize);
++ else {
++ /* we read the bytes from the callback. In case "chunked" encoding
++ * is forced by the application, we disregard `postsize`. This is
++ * a backward compatibility decision to earlier versions where
++ * chunking disregarded this. See issue #13229. */
++ bool chunked = FALSE;
++ char *ptr = Curl_checkheaders(data, STRCONST("Transfer-Encoding"));
++ if(ptr) {
++ /* Some kind of TE is requested, check if 'chunked' is chosen */
++ chunked = Curl_compareheader(ptr, STRCONST("Transfer-Encoding:"),
++ STRCONST("chunked"));
++ }
++ result = Curl_creader_set_fread(data, chunked? -1 : postsize);
+ }
+ return result;
+
+@@ -2115,6 +2126,13 @@ CURLcode Curl_http_req_set_reader(struct Curl_easy *data,
+ data->req.upload_chunky =
+ Curl_compareheader(ptr,
+ STRCONST("Transfer-Encoding:"), STRCONST("chunked"));
++ if(data->req.upload_chunky &&
++ Curl_use_http_1_1plus(data, data->conn) &&
++ (data->conn->httpversion >= 20)) {
++ infof(data, "suppressing chunked transfer encoding on connection "
++ "using HTTP version 2 or higher");
++ data->req.upload_chunky = FALSE;
++ }
+ }
+ else {
+ curl_off_t req_clen = Curl_creader_total_length(data);
diff --git a/meta/recipes-support/curl/curl/CVE-2019-5435.patch b/meta/recipes-support/curl/curl/CVE-2019-5435.patch
deleted file mode 100644
index f72435f608..0000000000
--- a/meta/recipes-support/curl/curl/CVE-2019-5435.patch
+++ /dev/null
@@ -1,266 +0,0 @@
-From 756380f74d58d5a877b26dc21be7b1316b617213 Mon Sep 17 00:00:00 2001
-From: Daniel Stenberg <daniel@haxx.se>
-Date: Mon, 29 Apr 2019 08:00:49 +0200
-Subject: [PATCH] CURL_MAX_INPUT_LENGTH: largest acceptable string input size
-
-This limits all accepted input strings passed to libcurl to be less than
-CURL_MAX_INPUT_LENGTH (8000000) bytes, for these API calls:
-curl_easy_setopt() and curl_url_set().
-
-The 8000000 number is arbitrary picked and is meant to detect mistakes
-or abuse, not to limit actual practical use cases. By limiting the
-acceptable string lengths we also reduce the risk of integer overflows
-all over.
-
-NOTE: This does not apply to `CURLOPT_POSTFIELDS`.
-
-Test 1559 verifies.
-
-Closes #3805
-
-Upstream-Status: Backport
-CVE: CVE-2019-5435
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
-
----
- lib/setopt.c | 7 +++++
- lib/urlapi.c | 8 +++++
- lib/urldata.h | 4 +++
- tests/data/Makefile.inc | 2 +-
- tests/data/test1559 | 44 ++++++++++++++++++++++++++
- tests/libtest/Makefile.inc | 6 ++--
- tests/libtest/lib1559.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++
- 7 files changed, 146 insertions(+), 3 deletions(-)
- create mode 100644 tests/data/test1559
- create mode 100644 tests/libtest/lib1559.c
-
-diff --git a/lib/setopt.c b/lib/setopt.c
-index b5f74a9..edf7165 100644
---- a/lib/setopt.c
-+++ b/lib/setopt.c
-@@ -61,6 +61,13 @@ CURLcode Curl_setstropt(char **charp, const char *s)
- if(s) {
- char *str = strdup(s);
-
-+ if(str) {
-+ size_t len = strlen(str);
-+ if(len > CURL_MAX_INPUT_LENGTH) {
-+ free(str);
-+ return CURLE_BAD_FUNCTION_ARGUMENT;
-+ }
-+ }
- if(!str)
- return CURLE_OUT_OF_MEMORY;
-
-diff --git a/lib/urlapi.c b/lib/urlapi.c
-index a19867e..822e4b3 100644
---- a/lib/urlapi.c
-+++ b/lib/urlapi.c
-@@ -642,6 +642,10 @@ static CURLUcode seturl(const char *url, CURLU *u, unsigned int flags)
- ************************************************************/
- /* allocate scratch area */
- urllen = strlen(url);
-+ if(urllen > CURL_MAX_INPUT_LENGTH)
-+ /* excessive input length */
-+ return CURLUE_MALFORMED_INPUT;
-+
- path = u->scratch = malloc(urllen * 2 + 2);
- if(!path)
- return CURLUE_OUT_OF_MEMORY;
-@@ -1272,6 +1276,10 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
- const char *newp = part;
- size_t nalloc = strlen(part);
-
-+ if(nalloc > CURL_MAX_INPUT_LENGTH)
-+ /* excessive input length */
-+ return CURLUE_MALFORMED_INPUT;
-+
- if(urlencode) {
- const char *i;
- char *o;
-diff --git a/lib/urldata.h b/lib/urldata.h
-index 24187a4..049a34d 100644
---- a/lib/urldata.h
-+++ b/lib/urldata.h
-@@ -79,6 +79,10 @@
- */
- #define RESP_TIMEOUT (120*1000)
-
-+/* Max string intput length is a precaution against abuse and to detect junk
-+ input easier and better. */
-+#define CURL_MAX_INPUT_LENGTH 8000000
-+
- #include "cookie.h"
- #include "psl.h"
- #include "formdata.h"
-diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
-index 2eca9c6..3dd234f 100644
---- a/tests/data/Makefile.inc
-+++ b/tests/data/Makefile.inc
-@@ -176,7 +176,7 @@ test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \
- test1533 test1534 test1535 test1536 test1537 test1538 \
- test1540 test1541 \
- test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
--test1558 test1560 test1561 test1562 \
-+test1558 test1559 test1560 test1561 test1562 \
- \
- test1590 test1591 test1592 \
- \
-diff --git a/tests/data/test1559 b/tests/data/test1559
-new file mode 100644
-index 0000000..cbed6fb
---- /dev/null
-+++ b/tests/data/test1559
-@@ -0,0 +1,44 @@
-+<testcase>
-+<info>
-+<keywords>
-+CURLOPT_URL
-+</keywords>
-+</info>
-+
-+<reply>
-+</reply>
-+
-+<client>
-+<server>
-+none
-+</server>
-+
-+# require HTTP so that CURLOPT_POSTFIELDS works as assumed
-+<features>
-+http
-+</features>
-+<tool>
-+lib1559
-+</tool>
-+
-+<name>
-+Set excessive URL lengths
-+</name>
-+</client>
-+
-+#
-+# Verify that the test runs to completion without crashing
-+<verify>
-+<errorcode>
-+0
-+</errorcode>
-+<stdout>
-+CURLOPT_URL 10000000 bytes URL == 43
-+CURLOPT_POSTFIELDS 10000000 bytes data == 0
-+CURLUPART_URL 10000000 bytes URL == 3
-+CURLUPART_SCHEME 10000000 bytes scheme == 3
-+CURLUPART_USER 10000000 bytes user == 3
-+</stdout>
-+</verify>
-+
-+</testcase>
-diff --git a/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc
-index e38f481..52b51c5 100644
---- a/tests/libtest/Makefile.inc
-+++ b/tests/libtest/Makefile.inc
-@@ -31,8 +31,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect \
- lib1534 lib1535 lib1536 lib1537 lib1538 \
- lib1540 lib1541 \
- lib1550 lib1551 lib1552 lib1553 lib1554 lib1555 lib1556 lib1557 \
-- lib1558 \
-- lib1560 \
-+ lib1558 lib1559 lib1560 \
- lib1591 lib1592 \
- lib1900 lib1905 \
- lib2033
-@@ -529,6 +528,9 @@ lib1557_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1557
- lib1558_SOURCES = lib1558.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
- lib1558_LDADD = $(TESTUTIL_LIBS)
-
-+lib1559_SOURCES = lib1559.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
-+lib1559_LDADD = $(TESTUTIL_LIBS)
-+
- lib1560_SOURCES = lib1560.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
- lib1560_LDADD = $(TESTUTIL_LIBS)
-
-diff --git a/tests/libtest/lib1559.c b/tests/libtest/lib1559.c
-new file mode 100644
-index 0000000..2aa3615
---- /dev/null
-+++ b/tests/libtest/lib1559.c
-@@ -0,0 +1,78 @@
-+/***************************************************************************
-+ * _ _ ____ _
-+ * Project ___| | | | _ \| |
-+ * / __| | | | |_) | |
-+ * | (__| |_| | _ <| |___
-+ * \___|\___/|_| \_\_____|
-+ *
-+ * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
-+ *
-+ * This software is licensed as described in the file COPYING, which
-+ * you should have received as part of this distribution. The terms
-+ * are also available at https://curl.haxx.se/docs/copyright.html.
-+ *
-+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
-+ * copies of the Software, and permit persons to whom the Software is
-+ * furnished to do so, under the terms of the COPYING file.
-+ *
-+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
-+ * KIND, either express or implied.
-+ *
-+ ***************************************************************************/
-+#include "test.h"
-+
-+#include "testutil.h"
-+#include "warnless.h"
-+#include "memdebug.h"
-+
-+#define EXCESSIVE 10*1000*1000
-+int test(char *URL)
-+{
-+ CURLcode res = 0;
-+ CURL *curl = NULL;
-+ char *longurl = malloc(EXCESSIVE);
-+ CURLU *u;
-+ (void)URL;
-+
-+ memset(longurl, 'a', EXCESSIVE);
-+ longurl[EXCESSIVE-1] = 0;
-+
-+ global_init(CURL_GLOBAL_ALL);
-+ easy_init(curl);
-+
-+ res = curl_easy_setopt(curl, CURLOPT_URL, longurl);
-+ printf("CURLOPT_URL %d bytes URL == %d\n",
-+ EXCESSIVE, (int)res);
-+
-+ res = curl_easy_setopt(curl, CURLOPT_POSTFIELDS, longurl);
-+ printf("CURLOPT_POSTFIELDS %d bytes data == %d\n",
-+ EXCESSIVE, (int)res);
-+
-+ u = curl_url();
-+ if(u) {
-+ CURLUcode uc = curl_url_set(u, CURLUPART_URL, longurl, 0);
-+ printf("CURLUPART_URL %d bytes URL == %d\n",
-+ EXCESSIVE, (int)uc);
-+ uc = curl_url_set(u, CURLUPART_SCHEME, longurl, CURLU_NON_SUPPORT_SCHEME);
-+ printf("CURLUPART_SCHEME %d bytes scheme == %d\n",
-+ EXCESSIVE, (int)uc);
-+ uc = curl_url_set(u, CURLUPART_USER, longurl, 0);
-+ printf("CURLUPART_USER %d bytes user == %d\n",
-+ EXCESSIVE, (int)uc);
-+ curl_url_cleanup(u);
-+ }
-+
-+ free(longurl);
-+
-+ curl_easy_cleanup(curl);
-+ curl_global_cleanup();
-+
-+ return 0;
-+
-+test_cleanup:
-+
-+ curl_easy_cleanup(curl);
-+ curl_global_cleanup();
-+
-+ return res; /* return the final return code */
-+}
diff --git a/meta/recipes-support/curl/curl/CVE-2019-5436.patch b/meta/recipes-support/curl/curl/CVE-2019-5436.patch
deleted file mode 100644
index eee26ce273..0000000000
--- a/meta/recipes-support/curl/curl/CVE-2019-5436.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 2da531b3068e22cf714f001b493a704b2e9b923f Mon Sep 17 00:00:00 2001
-From: Daniel Stenberg <daniel@haxx.se>
-Date: Fri, 3 May 2019 22:20:37 +0200
-Subject: [PATCH] tftp: use the current blksize for recvfrom()
-
-bug: https://curl.haxx.se/docs/CVE-2019-5436.html
-Reported-by: l00p3r on hackerone
-CVE-2019-5436
-
-Upstream-Status: Backport
-CVE: CVE-2019-5436
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
-
----
- lib/tftp.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/tftp.c b/lib/tftp.c
-index 8b92b7b..289cda2 100644
---- a/lib/tftp.c
-+++ b/lib/tftp.c
-@@ -1009,7 +1009,7 @@ static CURLcode tftp_connect(struct connectdata *conn, bool *done)
- state->sockfd = state->conn->sock[FIRSTSOCKET];
- state->state = TFTP_STATE_START;
- state->error = TFTP_ERR_NONE;
-- state->blksize = TFTP_BLKSIZE_DEFAULT;
-+ state->blksize = blksize;
- state->requested_blksize = blksize;
-
- ((struct sockaddr *)&state->local_addr)->sa_family =
diff --git a/meta/recipes-support/curl/curl/CVE-2019-5482.patch b/meta/recipes-support/curl/curl/CVE-2019-5482.patch
deleted file mode 100644
index 30122d1ae9..0000000000
--- a/meta/recipes-support/curl/curl/CVE-2019-5482.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From facb0e4662415b5f28163e853dc6742ac5fafb3d Mon Sep 17 00:00:00 2001
-From: Thomas Vegas <>
-Date: Sat, 31 Aug 2019 17:30:51 +0200
-Subject: [PATCH] tftp: Alloc maximum blksize, and use default unless OACK is
- received
-
-Fixes potential buffer overflow from 'recvfrom()', should the server
-return an OACK without blksize.
-
-Bug: https://curl.haxx.se/docs/CVE-2019-5482.html
-CVE-2019-5482
-
-Upstream-Status: Backport
-CVE: CVE-2019-5482
-
-Signed-off-by: Armin Kuster <akuster@mvista.com>
-
----
- lib/tftp.c | 12 +++++++++---
- 1 file changed, 9 insertions(+), 3 deletions(-)
-
-Index: curl-7.64.1/lib/tftp.c
-===================================================================
---- curl-7.64.1.orig/lib/tftp.c
-+++ curl-7.64.1/lib/tftp.c
-@@ -973,6 +973,7 @@ static CURLcode tftp_connect(struct conn
- {
- tftp_state_data_t *state;
- int blksize;
-+ int need_blksize;
-
- blksize = TFTP_BLKSIZE_DEFAULT;
-
-@@ -987,15 +988,20 @@ static CURLcode tftp_connect(struct conn
- return CURLE_TFTP_ILLEGAL;
- }
-
-+ need_blksize = blksize;
-+ /* default size is the fallback when no OACK is received */
-+ if(need_blksize < TFTP_BLKSIZE_DEFAULT)
-+ need_blksize = TFTP_BLKSIZE_DEFAULT;
-+
- if(!state->rpacket.data) {
-- state->rpacket.data = calloc(1, blksize + 2 + 2);
-+ state->rpacket.data = calloc(1, need_blksize + 2 + 2);
-
- if(!state->rpacket.data)
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(!state->spacket.data) {
-- state->spacket.data = calloc(1, blksize + 2 + 2);
-+ state->spacket.data = calloc(1, need_blksize + 2 + 2);
-
- if(!state->spacket.data)
- return CURLE_OUT_OF_MEMORY;
-@@ -1009,7 +1015,7 @@ static CURLcode tftp_connect(struct conn
- state->sockfd = state->conn->sock[FIRSTSOCKET];
- state->state = TFTP_STATE_START;
- state->error = TFTP_ERR_NONE;
-- state->blksize = blksize;
-+ state->blksize = TFTP_BLKSIZE_DEFAULT; /* Unless updated by OACK response */
- state->requested_blksize = blksize;
-
- ((struct sockaddr *)&state->local_addr)->sa_family =
diff --git a/meta/recipes-support/curl/curl/disable-tests b/meta/recipes-support/curl/curl/disable-tests
new file mode 100644
index 0000000000..259576fd01
--- /dev/null
+++ b/meta/recipes-support/curl/curl/disable-tests
@@ -0,0 +1,41 @@
+# Intermittently fails e.g. https://autobuilder.yocto.io/pub/non-release/20231220-28/testresults/qemux86-64-ptest/curl.log
+# https://autobuilder.yocto.io/pub/non-release/20231220-27/testresults/qemux86-64-ptest/curl.log
+337
+# These CRL test (alt-avc) are failing
+356
+412
+413
+# These CRL tests are scanning docs
+971
+# Intermittently hangs e.g http://autobuilder.yocto.io/pub/non-release/20231228-18/testresults/qemux86-64-ptest/curl.log
+1091
+# Intermittently hangs e.g https://autobuilder.yocto.io/pub/non-release/20231220-27/testresults/qemux86-64-ptest/curl.log
+1096
+# These CRL tests are scanning docs
+1119
+1132
+1135
+1478
+# These CRL tests are scanning headers
+1167
+1477
+# These CRL tests are scanning man pages
+1139
+1140
+1173
+1177
+# This CRL test is looking for m4 files
+1165
+# This CRL test is looking for src files
+1185
+# This test is scanning the source tree
+1222
+# These CRL tests need --libcurl option to be enabled
+1279
+1400
+1401
+1402
+1403
+1404
+1405
+1465
diff --git a/meta/recipes-support/curl/curl/no-test-timeout.patch b/meta/recipes-support/curl/curl/no-test-timeout.patch
new file mode 100644
index 0000000000..7122b6f043
--- /dev/null
+++ b/meta/recipes-support/curl/curl/no-test-timeout.patch
@@ -0,0 +1,25 @@
+From 42cddb52e821cfc2f09f1974742714e5f2f1856e Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Fri, 15 Mar 2024 14:37:37 +0000
+Subject: [PATCH] Set the max-time timeout to 600 so the timeout is 10 minutes
+ instead of 13 seconds.
+
+Upstream-Status: Inappropriate
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ tests/servers.pm | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/servers.pm b/tests/servers.pm
+index d4472d5..9999938 100644
+--- a/tests/servers.pm
++++ b/tests/servers.pm
+@@ -120,7 +120,7 @@ my $sshdverstr; # for socks server, ssh daemon version string
+ my $sshderror; # for socks server, ssh daemon version error
+ my %doesntrun; # servers that don't work, identified by pidfile
+ my %PORT = (nolisten => 47); # port we use for a local non-listening service
+-my $server_response_maxtime=13;
++my $server_response_maxtime=600;
+ my $httptlssrv = find_httptlssrv();
+ my %run; # running server
+ my %runcert; # cert file currently in use by an ssl running server
diff --git a/meta/recipes-support/curl/curl/run-ptest b/meta/recipes-support/curl/curl/run-ptest
new file mode 100644
index 0000000000..579b3f4587
--- /dev/null
+++ b/meta/recipes-support/curl/curl/run-ptest
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+cd tests
+
+# Run all tests, don't stop on first failure
+# Don't use valgrind if it is found
+# Use automake-style output
+# Run four tests in parallel
+# Print log output on failure
+
+# Don't run the flaky or timing dependent tests
+# Until https://github.com/curl/curl/issues/13350 is resolved, don't run FTP tests
+./runtests.pl -a -n -am -j4 -p !flaky !timing-dependent !FTP