Buy commercial curl support from WolfSSL. We help you work
out your issues, debug your libcurl applications, use the API, port to new
platforms, add new features and more. With a team lead by the curl founder
himself.
Re: core dump on curl function call
- Contemporary messages sorted: [ by date ] [ by thread ] [ by subject ] [ by author ] [ by messages with attachments ]
From: treesa fairy joseph via curl-library <curl-library_at_lists.haxx.se>
Date: Mon, 28 Feb 2022 14:05:17 +0530
I have used curl 7.73, openssl-1.1.1,libssh2-1.9.0 & zlib-1.2.11
Regards,
Treesa
On Mon, Feb 28, 2022 at 1:02 PM treesa fairy joseph <treesafj_at_gmail.com> wrote:
>
> Hello,
> The below is the core dump, for the above sample program.
>
> GNU gdb (Cavium Inc. Version 0.99 build 440) 7.8.50.20140823-cvs
> Copyright (C) 2014 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law. Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "aarch64-thunderx-linux-gnu".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <http://www.cavium.com/support.html>.
> Find the GDB manual and other documentation resources online at:
> <http://www.gnu.org/software/gdb/documentation/>.
> For help, type "help".
> Type "apropos word" to search for commands related to "word"...
> Reading symbols from curl_sample_type1...done.
>
> warning: core file may not match specified executable file.
> [New LWP 7954]
> [New LWP 7953]
>
> warning: Could not load shared library symbols for linux-vdso.so.1.
> Do you need "set solib-search-path" or "set sysroot"?
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
> Core was generated by `./curl_sample_type1'.
> Program terminated with signal SIGSEGV, Segmentation fault.
> #0 0x000000000042bb48 in singlesocket (multi=0xffff740024d8,
> data=0xffff740008c8) at multi.c:2806
> 2806 multi.c: No such file or directory.
> (gdb) bt
> #0 0x000000000042bb48 in singlesocket (multi=0xffff740024d8,
> data=0xffff740008c8) at multi.c:2806
> #1 0x00000000004280f8 in curl_multi_remove_handle
> (multi=0xffff740024d8, data=0xffff740008c8)
> at multi.c:809
> #2 0x0000000000402cec in easy_perform (data=0xffff740008c8,
> events=false) at easy.c:686
> #3 0x0000000000402d20 in curl_easy_perform (data=0xffff740008c8) at easy.c:701
> #4 0x0000000000401c18 in pull_one_url (url=0x7a5488) at multithread_type1.c:342
> #5 0x000000000071c018 in start_thread (arg=0x0) at pthread_create.c:335
> #6 0x00000000007577d8 in thread_start () at
> ../sysdeps/unix/sysv/linux/aarch64/clone.S:94
> (gdb) full bt
> Undefined command: "full". Try "help".
> (gdb) bt full
> #0 0x000000000042bb48 in singlesocket (multi=0xffff740024d8,
> data=0xffff740008c8) at multi.c:2806
> j = 0
> stillused = false
> socks = {-1, -1, -1, -1, -1}
> i = 81326
> entry = 0x0
> s = 0
> num = 0
> curraction = 0
> actions = {4427656, 0, 2077615200, 65535, 4574260}
> __PRETTY_FUNCTION__ = "singlesocket"
> #1 0x00000000004280f8 in curl_multi_remove_handle
> (multi=0xffff740024d8, data=0xffff740008c8)
> at multi.c:809
> easy = 0xffff740008c8
> premature = false
> easy_owns_conn = false
> e = 0x1600000000
> #2 0x0000000000402cec in easy_perform (data=0xffff740008c8,
> events=false) at easy.c:686
> multi = 0xffff740024d8
> mcode = CURLM_OK
> result = CURLE_HTTP_RETURNED_ERROR
> pipe_st = {old_pipe_act = {__sigaction_handler = {sa_handler =
> 0x0, sa_sigaction = 0x0},
> sa_mask = {__val = {0, 9232388042942056450,
> 281472759358576, 281472759358576,
> 281472627908192, 281472627908192, 0, 281472627907776,
> 281472759358528, 4378944,
> 25769828978, 36305904856, 281472759358576,
> 281472627902664, 281472759358528,
> 4378924}}, sa_flags = 0, sa_restorer = 0x0}, no_signal = false}
> #3 0x0000000000402d20 in curl_easy_perform (data=0xffff740008c8) at easy.c:701
> No locals.
> #4 0x0000000000401c18 in pull_one_url (url=0x7a5488) at multithread_type1.c:342
> header_chunk = {memory = 0x0, size = 0}
> slist = 0xffff740022e8
> msg = 0x7a5678 "Field=1&Field=2&Field=3"
> curl = 0xffff740008c8
> chunk = {memory = 0x0, size = 0}
> str = 0x0
> arr = '\000' <repeats 511 times>
> token = 0x0
> ---Type <return> to continue, or q <return> to quit---
>
> On Mon, Feb 28, 2022 at 12:57 PM treesa fairy joseph <treesafj_at_gmail.com> wrote:
> >
> > curl-library <curl-library_at_lists.haxx.se>
> >
> > On Mon, Feb 28, 2022 at 12:12 PM treesa fairy joseph <treesafj_at_gmail.com> wrote:
> > >
> > > Hello Daniel,
> > > Could not come back to this issue, for a while. Right now, back on this problem.
> > > The below shows the sample program which also generates the seg flt
> > >
> > >
> > >
> > > /***************************************************************************
> > > * _ _ ____ _
> > > * Project ___| | | | _ \| |
> > > * / __| | | | |_) | |
> > > * | (__| |_| | _ <| |___
> > > * \___|\___/|_| \_\_____|
> > > *
> > > * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel_at_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.
> > > *
> > > ***************************************************************************/
> > > /* <DESC>
> > > * A multi-threaded example that uses pthreads to fetch several files at once
> > > * </DESC>
> > > */
> > >
> > > #include <stdio.h>
> > > #include <pthread.h>
> > > #include <curl/curl.h>
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > > #include <string.h>
> > > #include <curl/curl.h>
> > > #include <openssl/x509v3.h>
> > > #include <openssl/x509_vfy.h>
> > > #include <openssl/crypto.h>
> > > #include <openssl/lhash.h>
> > > #include <openssl/objects.h>
> > > #include <openssl/err.h>
> > > #include <openssl/evp.h>
> > > #include <openssl/x509.h>
> > > #include <openssl/pkcs12.h>
> > > #include <openssl/bio.h>
> > > #include <openssl/ssl.h>
> > > #include <openssl/ossl_typ.h>
> > > //#include <crypto/internal/x509_int.h>
> > > #include <crypto/include/internal/x509_int.h>
> > >
> > > #define NUMT 1
> > > typedef struct MemoryStruct
> > > {
> > > unsigned char *memory;
> > > size_t size;
> > > } memory_struct_t;
> > > #define ZERO_NULL 0
> > >
> > >
> > > typedef struct sslctxparm_st {
> > > unsigned char *p12file;
> > > const char *pst;
> > > PKCS12 *p12;
> > > EVP_PKEY *pkey;
> > > X509 *usercert;
> > > STACK_OF(X509) * ca;
> > > CURL *curl;
> > > BIO *errorbio;
> > > int accesstype;
> > > int verbose;
> > >
> > > } sslctxparm;
> > >
> > > /*
> > > List of URLs to fetch.
> > >
> > > If you intend to use a SSL-based protocol here you might need to setup TLS
> > > library mutex callbacks as described here:
> > >
> > > https://curl.haxx.se/libcurl/c/threadsafe.html
> > >
> > > */
> > >
> > > /********************************************************************************
> > > * Function Name : ipr_cwmp_WriteMemoryCallback
> > > *
> > > * Description :
> > > *
> > > *
> > > * Returns :
> > > *
> > > *******************************************************************************/
> > >
> > > size_t ipr_cwmp_WriteMemoryCallback(void *contents,
> > > size_t size,
> > > size_t nmemb,
> > > void *userp)
> > > {
> > > size_t realsize = size * nmemb;
> > > struct MemoryStruct *mem = (struct MemoryStruct *)userp;
> > > mem->memory = realloc(mem->memory, mem->size + realsize + 1 );
> > > if (mem->memory == NULL)
> > > {
> > > /* out of memory! */
> > > printf("Exiting the function ipr_cwmp_WriteMemoryCallback 101 \n");
> > > exit(1);
> > > }
> > > memcpy(&(mem->memory[mem->size]), contents, realsize);
> > > mem->size += realsize;
> > > mem->memory[mem->size] = 0;
> > > printf("Exiting the function ipr_cwmp_WriteMemoryCallback 100 \n");
> > > return realsize;
> > > }
> > >
> > >
> > > /* This is an application verification call back, it does not
> > > perform any addition verification but tries to find a URL
> > > in the presented certificate. If found, this will become
> > > the URL to be used in the POST.
> > > */
> > > static int ssl_app_verify_callback(X509_STORE_CTX *ctx, void *arg)
> > > {
> > > sslctxparm * p = (sslctxparm *) arg;
> > > int ok;
> > >
> > > if(p->verbose > 2)
> > > BIO_printf(p->errorbio, "entering ssl_app_verify_callback\n");
> > >
> > > ok = X509_verify_cert(ctx);
> > > if(ok && ctx->cert) {
> > > unsigned char *accessinfo;
> > > if(p->verbose > 1)
> > > X509_print_ex(p->errorbio, ctx->cert, 0, 0);
> > >
> > > // accessinfo = my_get_ext(ctx->cert, p->accesstype, NID_sinfo_access);
> > > // if(accessinfo) {
> > > // if(p->verbose)
> > > // BIO_printf(p->errorbio, "Setting URL from SIA to:
> > > %s\n", accessinfo);
> > > //
> > > // curl_easy_setopt(p->curl, CURLOPT_URL, accessinfo);
> > > // }
> > > // else if(accessinfo = my_get_ext(ctx->cert, p->accesstype,
> > > // NID_info_access)) {
> > > // if(p->verbose)
> > > // BIO_printf(p->errorbio, "Setting URL from AIA to:
> > > %s\n", accessinfo);
> > > //
> > > // curl_easy_setopt(p->curl, CURLOPT_URL, accessinfo);
> > > // }
> > > }
> > > if(p->verbose > 2)
> > > BIO_printf(p->errorbio, "leaving ssl_app_verify_callback with
> > > %d\n", ok);
> > >
> > > return ok;
> > > }
> > >
> > > /*************************************************************************************************
> > > * Function Name : ipr_cwmp_sslctxfun
> > > *
> > > * Description : This is an example of an curl SSL initialisation
> > > call back. The callback sets:
> > > * a private key and certificate
> > > * a trusted ca certificate
> > > * a preferred cipherlist
> > > * an application verification callback (the function above)
> > > * Returns : CURLcode
> > > *
> > > ***************************************************************************************************/
> > >
> > > static CURLcode ipr_cwmp_sslctxfun(void* sslctx, void* parm)
> > > {
> > > SSL_CTX* ctx = (SSL_CTX *) sslctx ;
> > > SSL_CTX_set_cert_verify_callback(ctx, ssl_app_verify_callback, parm);
> > > //SSL_CTX_set_cert_verify_callback(ctx,
> > > ipr_cwmp_ssl_app_verify_callback, parm);
> > > //changed this to supress the warning for ssl prototype of this function
> > > return CURLE_OK ;
> > > }
> > > /***************************************************************************************************/
> > >
> > >
> > > const char * const urls[NUMT]= {
> > > "https://192.168.66.116:8443/acs/AcsServlet"
> > > //"https://192.168.16.233:8443/acs/AcsServlet",
> > > //"ftp://cool.haxx.se/",
> > > //"https://www.cag.se/",
> > > //"www.haxx.se"
> > > };
> > > //curl_easy_setopt(curl, CURLOPT_SSLCERT,"client-2048.crt");
> > > //curl_easy_setopt(curl, CURLOPT_SSLKEY,"client-2048.key");
> > >
> > > static void *pull_one_url(void *url)
> > > {
> > > struct MemoryStruct header_chunk = {0};
> > > struct curl_slist *slist = NULL;
> > > static const char *msg = "Field=1&Field=2&Field=3";
> > > CURL *curl;
> > > struct MemoryStruct chunk = {0};
> > > /*SPR 17929 changes start*/
> > > char * str = NULL;
> > > char arr[512];
> > > memset(arr, '\0', 512);
> > > char * token = NULL;
> > > /*SPR 17929 changes end*/
> > >
> > > chunk.memory = NULL; /* will be grown as needed by the realloc above */
> > > chunk.size = 0;
> > >
> > > curl = curl_easy_init();
> > > curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
> > > //curl_easy_setopt(curl,CURLOPT_RESOLVE, host);
> > > curl_easy_setopt(curl, CURLOPT_URL, url);
> > > curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
> > > /* get verbose debug output please */
> > > curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
> > > curl_easy_setopt(curl, CURLOPT_POST, 1);
> > > curl_easy_setopt(curl, CURLOPT_POSTFIELDS,(char *)msg);
> > >
> > > slist = NULL;
> > > slist = curl_slist_append(NULL, "Content-Type: text/xml;
> > > UInt8set=utf-8\nSOAPAction:");
> > > curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt");
> > > curl_easy_setopt(curl, CURLOPT_COOKIE, "cookie.txt");
> > > if (header_chunk.size)
> > > {
> > > str = strstr((char *)header_chunk.memory, "JSESSIONID=");
> > > printf("Extracted JSESSIONID \n");
> > > }
> > >
> > > if ((header_chunk.size) && (str!= NULL))
> > > {
> > > token = strtok(str + 11, ";");
> > > memset(arr,0x00,512);
> > > sprintf(arr, "Cookie: JSESSIONID=%s",token);
> > > printf("Token has value %s \n",arr);
> > > slist = curl_slist_append(slist,arr);
> > > printf("Added httpHeader \n");
> > > }
> > > curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
> > > if(0 == header_chunk.size)
> > > {
> > > curl_easy_setopt(curl, CURLOPT_HEADERDATA,(void *)&header_chunk);
> > > }
> > >
> > > curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, ipr_cwmp_sslctxfun);
> > > //curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctxfun);
> > > curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ipr_cwmp_WriteMemoryCallback);
> > > /* we pass our 'chunk' struct to the callback function */
> > > //coverity fix
> > > curl_easy_setopt(curl, CURLOPT_WRITEDATA,(void *)&chunk);
> > > curl_easy_setopt(curl, CURLOPT_SSLKEY,"./tls_files/enodeb-new.key.pem");
> > > curl_easy_setopt(curl, CURLOPT_SSLCERT,"./tls_files/enodeb.cert.pem");
> > > //curl_easy_setopt(curl, CURLOPT_SSLKEY, g_ipr_cwmp_pClientKeyFile);
> > > /* set the file with the certs vaildating the server */
> > > //curl_easy_setopt(curl, CURLOPT_SSLCERT, g_ipr_cwmp_pClientCertFile);
> > > /* disconnect if we can't validate server's cert */
> > > curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L);
> > > curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
> > > curl_easy_setopt(curl,CURLOPT_CAINFO,"./tls_files/ca-chain.cert.pem");
> > > curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L);
> > > curl_easy_setopt(curl,CURLOPT_MAXREDIRS,5L);
> > > curl_easy_setopt(curl,CURLOPT_POSTREDIR,CURL_REDIR_POST_ALL);
> > > curl_easy_setopt(curl, CURLOPT_POST, 1);
> > >
> > > //coverity fix
> > > //curl_easy_setopt(curl, CURLOPT_POSTFIELDS,(char *)msg);
> > > //curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt");
> > > //curl_easy_setopt(curl, CURLOPT_COOKIE, "cookie.txt");
> > > curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC|CURLAUTH_DIGEST);
> > > curl_easy_setopt (curl, CURLOPT_USERNAME
> > > ,"BaseStationClass-002488-1114B00001");
> > > curl_easy_setopt (curl, CURLOPT_PASSWORD ,"abcd1234");
> > > // curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION,
> > > ipr_cwmp_sslctxfun) ;
> > >
> > >
> > >
> > > curl_easy_perform(curl); /* ignores error */
> > > curl_easy_cleanup(curl);
> > >
> > > return NULL;
> > > }
> > >
> > >
> > > /*
> > > int pthread_create(pthread_t *new_thread_ID,
> > > const pthread_attr_t *attr,
> > > void * (*start_func)(void *), void *arg);
> > > */
> > >
> > > int main(int argc, char **argv)
> > > {
> > > pthread_t tid[NUMT];
> > > int i;
> > >
> > > /* Must initialize libcurl before any threads are started */
> > > curl_global_init(CURL_GLOBAL_ALL);
> > >
> > > for(i = 0; i< NUMT; i++) {
> > > int error = pthread_create(&tid[i],
> > > NULL, /* default attributes please */
> > > pull_one_url,
> > > (void *)urls[i]);
> > > if(0 != error)
> > > fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
> > > else
> > > fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
> > > }
> > >
> > > /* now wait for all threads to terminate */
> > > for(i = 0; i< NUMT; i++) {
> > > pthread_join(tid[i], NULL);
> > > fprintf(stderr, "Thread %d terminated\n", i);
> > > }
> > > curl_global_cleanup();
> > > return 0;
> > > }
> > >
> > >
> > > On Fri, Oct 1, 2021 at 8:29 PM Daniel Stenberg <daniel_at_haxx.se> wrote:
> > > >
> > > > On Fri, 1 Oct 2021, treesa fairy joseph wrote:
> > > >
> > > > > #0 0x00000000005377c4 in Curl_hash_clean_with_criterium (h=0xffff7c0a4d50,
> > > > > user=0xffff8b28d970,
> > > > > comp=0x4ba604 <hostcache_timestamp_remove>) at hash.c:243
> > > > > 243 hash.c: No such file or directory.
> > > > > (gdb) bt
> > > > > #0 0x00000000005377c4 in Curl_hash_clean_with_criterium (h=0xffff7c0a4d50,
> > > > > user=0xffff8b28d970,
> > > > > comp=0x4ba604 <hostcache_timestamp_remove>) at hash.c:243
> > > >
> > > > This issue shows the typical signs of a threading problem. Make sure that
> > > > your application and threading follow the advice here:
> > > >
> > > > https://curl.se/libcurl/c/threadsafe.html
> > > >
> > > > In particular the dont-use-the-same-handle-twice rule.
> > > >
> > > > If that doesn't help, then I'd advice you to start trying to create a separate
> > > > stand-alone example code that reproduces the problem that you can share with
> > > > us.
> > > >
> > > > --
> > > >
> > > > / daniel.haxx.se
> > > > | Commercial curl support up to 24x7 is available!
> > > > | Private help, bug fixes, support, ports, new features
> > > > | https://curl.se/support.html
Date: Mon, 28 Feb 2022 14:05:17 +0530
I have used curl 7.73, openssl-1.1.1,libssh2-1.9.0 & zlib-1.2.11
Regards,
Treesa
On Mon, Feb 28, 2022 at 1:02 PM treesa fairy joseph <treesafj_at_gmail.com> wrote:
>
> Hello,
> The below is the core dump, for the above sample program.
>
> GNU gdb (Cavium Inc. Version 0.99 build 440) 7.8.50.20140823-cvs
> Copyright (C) 2014 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law. Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "aarch64-thunderx-linux-gnu".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <http://www.cavium.com/support.html>.
> Find the GDB manual and other documentation resources online at:
> <http://www.gnu.org/software/gdb/documentation/>.
> For help, type "help".
> Type "apropos word" to search for commands related to "word"...
> Reading symbols from curl_sample_type1...done.
>
> warning: core file may not match specified executable file.
> [New LWP 7954]
> [New LWP 7953]
>
> warning: Could not load shared library symbols for linux-vdso.so.1.
> Do you need "set solib-search-path" or "set sysroot"?
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
> Core was generated by `./curl_sample_type1'.
> Program terminated with signal SIGSEGV, Segmentation fault.
> #0 0x000000000042bb48 in singlesocket (multi=0xffff740024d8,
> data=0xffff740008c8) at multi.c:2806
> 2806 multi.c: No such file or directory.
> (gdb) bt
> #0 0x000000000042bb48 in singlesocket (multi=0xffff740024d8,
> data=0xffff740008c8) at multi.c:2806
> #1 0x00000000004280f8 in curl_multi_remove_handle
> (multi=0xffff740024d8, data=0xffff740008c8)
> at multi.c:809
> #2 0x0000000000402cec in easy_perform (data=0xffff740008c8,
> events=false) at easy.c:686
> #3 0x0000000000402d20 in curl_easy_perform (data=0xffff740008c8) at easy.c:701
> #4 0x0000000000401c18 in pull_one_url (url=0x7a5488) at multithread_type1.c:342
> #5 0x000000000071c018 in start_thread (arg=0x0) at pthread_create.c:335
> #6 0x00000000007577d8 in thread_start () at
> ../sysdeps/unix/sysv/linux/aarch64/clone.S:94
> (gdb) full bt
> Undefined command: "full". Try "help".
> (gdb) bt full
> #0 0x000000000042bb48 in singlesocket (multi=0xffff740024d8,
> data=0xffff740008c8) at multi.c:2806
> j = 0
> stillused = false
> socks = {-1, -1, -1, -1, -1}
> i = 81326
> entry = 0x0
> s = 0
> num = 0
> curraction = 0
> actions = {4427656, 0, 2077615200, 65535, 4574260}
> __PRETTY_FUNCTION__ = "singlesocket"
> #1 0x00000000004280f8 in curl_multi_remove_handle
> (multi=0xffff740024d8, data=0xffff740008c8)
> at multi.c:809
> easy = 0xffff740008c8
> premature = false
> easy_owns_conn = false
> e = 0x1600000000
> #2 0x0000000000402cec in easy_perform (data=0xffff740008c8,
> events=false) at easy.c:686
> multi = 0xffff740024d8
> mcode = CURLM_OK
> result = CURLE_HTTP_RETURNED_ERROR
> pipe_st = {old_pipe_act = {__sigaction_handler = {sa_handler =
> 0x0, sa_sigaction = 0x0},
> sa_mask = {__val = {0, 9232388042942056450,
> 281472759358576, 281472759358576,
> 281472627908192, 281472627908192, 0, 281472627907776,
> 281472759358528, 4378944,
> 25769828978, 36305904856, 281472759358576,
> 281472627902664, 281472759358528,
> 4378924}}, sa_flags = 0, sa_restorer = 0x0}, no_signal = false}
> #3 0x0000000000402d20 in curl_easy_perform (data=0xffff740008c8) at easy.c:701
> No locals.
> #4 0x0000000000401c18 in pull_one_url (url=0x7a5488) at multithread_type1.c:342
> header_chunk = {memory = 0x0, size = 0}
> slist = 0xffff740022e8
> msg = 0x7a5678 "Field=1&Field=2&Field=3"
> curl = 0xffff740008c8
> chunk = {memory = 0x0, size = 0}
> str = 0x0
> arr = '\000' <repeats 511 times>
> token = 0x0
> ---Type <return> to continue, or q <return> to quit---
>
> On Mon, Feb 28, 2022 at 12:57 PM treesa fairy joseph <treesafj_at_gmail.com> wrote:
> >
> > curl-library <curl-library_at_lists.haxx.se>
> >
> > On Mon, Feb 28, 2022 at 12:12 PM treesa fairy joseph <treesafj_at_gmail.com> wrote:
> > >
> > > Hello Daniel,
> > > Could not come back to this issue, for a while. Right now, back on this problem.
> > > The below shows the sample program which also generates the seg flt
> > >
> > >
> > >
> > > /***************************************************************************
> > > * _ _ ____ _
> > > * Project ___| | | | _ \| |
> > > * / __| | | | |_) | |
> > > * | (__| |_| | _ <| |___
> > > * \___|\___/|_| \_\_____|
> > > *
> > > * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel_at_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.
> > > *
> > > ***************************************************************************/
> > > /* <DESC>
> > > * A multi-threaded example that uses pthreads to fetch several files at once
> > > * </DESC>
> > > */
> > >
> > > #include <stdio.h>
> > > #include <pthread.h>
> > > #include <curl/curl.h>
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > > #include <string.h>
> > > #include <curl/curl.h>
> > > #include <openssl/x509v3.h>
> > > #include <openssl/x509_vfy.h>
> > > #include <openssl/crypto.h>
> > > #include <openssl/lhash.h>
> > > #include <openssl/objects.h>
> > > #include <openssl/err.h>
> > > #include <openssl/evp.h>
> > > #include <openssl/x509.h>
> > > #include <openssl/pkcs12.h>
> > > #include <openssl/bio.h>
> > > #include <openssl/ssl.h>
> > > #include <openssl/ossl_typ.h>
> > > //#include <crypto/internal/x509_int.h>
> > > #include <crypto/include/internal/x509_int.h>
> > >
> > > #define NUMT 1
> > > typedef struct MemoryStruct
> > > {
> > > unsigned char *memory;
> > > size_t size;
> > > } memory_struct_t;
> > > #define ZERO_NULL 0
> > >
> > >
> > > typedef struct sslctxparm_st {
> > > unsigned char *p12file;
> > > const char *pst;
> > > PKCS12 *p12;
> > > EVP_PKEY *pkey;
> > > X509 *usercert;
> > > STACK_OF(X509) * ca;
> > > CURL *curl;
> > > BIO *errorbio;
> > > int accesstype;
> > > int verbose;
> > >
> > > } sslctxparm;
> > >
> > > /*
> > > List of URLs to fetch.
> > >
> > > If you intend to use a SSL-based protocol here you might need to setup TLS
> > > library mutex callbacks as described here:
> > >
> > > https://curl.haxx.se/libcurl/c/threadsafe.html
> > >
> > > */
> > >
> > > /********************************************************************************
> > > * Function Name : ipr_cwmp_WriteMemoryCallback
> > > *
> > > * Description :
> > > *
> > > *
> > > * Returns :
> > > *
> > > *******************************************************************************/
> > >
> > > size_t ipr_cwmp_WriteMemoryCallback(void *contents,
> > > size_t size,
> > > size_t nmemb,
> > > void *userp)
> > > {
> > > size_t realsize = size * nmemb;
> > > struct MemoryStruct *mem = (struct MemoryStruct *)userp;
> > > mem->memory = realloc(mem->memory, mem->size + realsize + 1 );
> > > if (mem->memory == NULL)
> > > {
> > > /* out of memory! */
> > > printf("Exiting the function ipr_cwmp_WriteMemoryCallback 101 \n");
> > > exit(1);
> > > }
> > > memcpy(&(mem->memory[mem->size]), contents, realsize);
> > > mem->size += realsize;
> > > mem->memory[mem->size] = 0;
> > > printf("Exiting the function ipr_cwmp_WriteMemoryCallback 100 \n");
> > > return realsize;
> > > }
> > >
> > >
> > > /* This is an application verification call back, it does not
> > > perform any addition verification but tries to find a URL
> > > in the presented certificate. If found, this will become
> > > the URL to be used in the POST.
> > > */
> > > static int ssl_app_verify_callback(X509_STORE_CTX *ctx, void *arg)
> > > {
> > > sslctxparm * p = (sslctxparm *) arg;
> > > int ok;
> > >
> > > if(p->verbose > 2)
> > > BIO_printf(p->errorbio, "entering ssl_app_verify_callback\n");
> > >
> > > ok = X509_verify_cert(ctx);
> > > if(ok && ctx->cert) {
> > > unsigned char *accessinfo;
> > > if(p->verbose > 1)
> > > X509_print_ex(p->errorbio, ctx->cert, 0, 0);
> > >
> > > // accessinfo = my_get_ext(ctx->cert, p->accesstype, NID_sinfo_access);
> > > // if(accessinfo) {
> > > // if(p->verbose)
> > > // BIO_printf(p->errorbio, "Setting URL from SIA to:
> > > %s\n", accessinfo);
> > > //
> > > // curl_easy_setopt(p->curl, CURLOPT_URL, accessinfo);
> > > // }
> > > // else if(accessinfo = my_get_ext(ctx->cert, p->accesstype,
> > > // NID_info_access)) {
> > > // if(p->verbose)
> > > // BIO_printf(p->errorbio, "Setting URL from AIA to:
> > > %s\n", accessinfo);
> > > //
> > > // curl_easy_setopt(p->curl, CURLOPT_URL, accessinfo);
> > > // }
> > > }
> > > if(p->verbose > 2)
> > > BIO_printf(p->errorbio, "leaving ssl_app_verify_callback with
> > > %d\n", ok);
> > >
> > > return ok;
> > > }
> > >
> > > /*************************************************************************************************
> > > * Function Name : ipr_cwmp_sslctxfun
> > > *
> > > * Description : This is an example of an curl SSL initialisation
> > > call back. The callback sets:
> > > * a private key and certificate
> > > * a trusted ca certificate
> > > * a preferred cipherlist
> > > * an application verification callback (the function above)
> > > * Returns : CURLcode
> > > *
> > > ***************************************************************************************************/
> > >
> > > static CURLcode ipr_cwmp_sslctxfun(void* sslctx, void* parm)
> > > {
> > > SSL_CTX* ctx = (SSL_CTX *) sslctx ;
> > > SSL_CTX_set_cert_verify_callback(ctx, ssl_app_verify_callback, parm);
> > > //SSL_CTX_set_cert_verify_callback(ctx,
> > > ipr_cwmp_ssl_app_verify_callback, parm);
> > > //changed this to supress the warning for ssl prototype of this function
> > > return CURLE_OK ;
> > > }
> > > /***************************************************************************************************/
> > >
> > >
> > > const char * const urls[NUMT]= {
> > > "https://192.168.66.116:8443/acs/AcsServlet"
> > > //"https://192.168.16.233:8443/acs/AcsServlet",
> > > //"ftp://cool.haxx.se/",
> > > //"https://www.cag.se/",
> > > //"www.haxx.se"
> > > };
> > > //curl_easy_setopt(curl, CURLOPT_SSLCERT,"client-2048.crt");
> > > //curl_easy_setopt(curl, CURLOPT_SSLKEY,"client-2048.key");
> > >
> > > static void *pull_one_url(void *url)
> > > {
> > > struct MemoryStruct header_chunk = {0};
> > > struct curl_slist *slist = NULL;
> > > static const char *msg = "Field=1&Field=2&Field=3";
> > > CURL *curl;
> > > struct MemoryStruct chunk = {0};
> > > /*SPR 17929 changes start*/
> > > char * str = NULL;
> > > char arr[512];
> > > memset(arr, '\0', 512);
> > > char * token = NULL;
> > > /*SPR 17929 changes end*/
> > >
> > > chunk.memory = NULL; /* will be grown as needed by the realloc above */
> > > chunk.size = 0;
> > >
> > > curl = curl_easy_init();
> > > curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
> > > //curl_easy_setopt(curl,CURLOPT_RESOLVE, host);
> > > curl_easy_setopt(curl, CURLOPT_URL, url);
> > > curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
> > > /* get verbose debug output please */
> > > curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
> > > curl_easy_setopt(curl, CURLOPT_POST, 1);
> > > curl_easy_setopt(curl, CURLOPT_POSTFIELDS,(char *)msg);
> > >
> > > slist = NULL;
> > > slist = curl_slist_append(NULL, "Content-Type: text/xml;
> > > UInt8set=utf-8\nSOAPAction:");
> > > curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt");
> > > curl_easy_setopt(curl, CURLOPT_COOKIE, "cookie.txt");
> > > if (header_chunk.size)
> > > {
> > > str = strstr((char *)header_chunk.memory, "JSESSIONID=");
> > > printf("Extracted JSESSIONID \n");
> > > }
> > >
> > > if ((header_chunk.size) && (str!= NULL))
> > > {
> > > token = strtok(str + 11, ";");
> > > memset(arr,0x00,512);
> > > sprintf(arr, "Cookie: JSESSIONID=%s",token);
> > > printf("Token has value %s \n",arr);
> > > slist = curl_slist_append(slist,arr);
> > > printf("Added httpHeader \n");
> > > }
> > > curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
> > > if(0 == header_chunk.size)
> > > {
> > > curl_easy_setopt(curl, CURLOPT_HEADERDATA,(void *)&header_chunk);
> > > }
> > >
> > > curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, ipr_cwmp_sslctxfun);
> > > //curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctxfun);
> > > curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ipr_cwmp_WriteMemoryCallback);
> > > /* we pass our 'chunk' struct to the callback function */
> > > //coverity fix
> > > curl_easy_setopt(curl, CURLOPT_WRITEDATA,(void *)&chunk);
> > > curl_easy_setopt(curl, CURLOPT_SSLKEY,"./tls_files/enodeb-new.key.pem");
> > > curl_easy_setopt(curl, CURLOPT_SSLCERT,"./tls_files/enodeb.cert.pem");
> > > //curl_easy_setopt(curl, CURLOPT_SSLKEY, g_ipr_cwmp_pClientKeyFile);
> > > /* set the file with the certs vaildating the server */
> > > //curl_easy_setopt(curl, CURLOPT_SSLCERT, g_ipr_cwmp_pClientCertFile);
> > > /* disconnect if we can't validate server's cert */
> > > curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L);
> > > curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
> > > curl_easy_setopt(curl,CURLOPT_CAINFO,"./tls_files/ca-chain.cert.pem");
> > > curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L);
> > > curl_easy_setopt(curl,CURLOPT_MAXREDIRS,5L);
> > > curl_easy_setopt(curl,CURLOPT_POSTREDIR,CURL_REDIR_POST_ALL);
> > > curl_easy_setopt(curl, CURLOPT_POST, 1);
> > >
> > > //coverity fix
> > > //curl_easy_setopt(curl, CURLOPT_POSTFIELDS,(char *)msg);
> > > //curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt");
> > > //curl_easy_setopt(curl, CURLOPT_COOKIE, "cookie.txt");
> > > curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC|CURLAUTH_DIGEST);
> > > curl_easy_setopt (curl, CURLOPT_USERNAME
> > > ,"BaseStationClass-002488-1114B00001");
> > > curl_easy_setopt (curl, CURLOPT_PASSWORD ,"abcd1234");
> > > // curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION,
> > > ipr_cwmp_sslctxfun) ;
> > >
> > >
> > >
> > > curl_easy_perform(curl); /* ignores error */
> > > curl_easy_cleanup(curl);
> > >
> > > return NULL;
> > > }
> > >
> > >
> > > /*
> > > int pthread_create(pthread_t *new_thread_ID,
> > > const pthread_attr_t *attr,
> > > void * (*start_func)(void *), void *arg);
> > > */
> > >
> > > int main(int argc, char **argv)
> > > {
> > > pthread_t tid[NUMT];
> > > int i;
> > >
> > > /* Must initialize libcurl before any threads are started */
> > > curl_global_init(CURL_GLOBAL_ALL);
> > >
> > > for(i = 0; i< NUMT; i++) {
> > > int error = pthread_create(&tid[i],
> > > NULL, /* default attributes please */
> > > pull_one_url,
> > > (void *)urls[i]);
> > > if(0 != error)
> > > fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
> > > else
> > > fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
> > > }
> > >
> > > /* now wait for all threads to terminate */
> > > for(i = 0; i< NUMT; i++) {
> > > pthread_join(tid[i], NULL);
> > > fprintf(stderr, "Thread %d terminated\n", i);
> > > }
> > > curl_global_cleanup();
> > > return 0;
> > > }
> > >
> > >
> > > On Fri, Oct 1, 2021 at 8:29 PM Daniel Stenberg <daniel_at_haxx.se> wrote:
> > > >
> > > > On Fri, 1 Oct 2021, treesa fairy joseph wrote:
> > > >
> > > > > #0 0x00000000005377c4 in Curl_hash_clean_with_criterium (h=0xffff7c0a4d50,
> > > > > user=0xffff8b28d970,
> > > > > comp=0x4ba604 <hostcache_timestamp_remove>) at hash.c:243
> > > > > 243 hash.c: No such file or directory.
> > > > > (gdb) bt
> > > > > #0 0x00000000005377c4 in Curl_hash_clean_with_criterium (h=0xffff7c0a4d50,
> > > > > user=0xffff8b28d970,
> > > > > comp=0x4ba604 <hostcache_timestamp_remove>) at hash.c:243
> > > >
> > > > This issue shows the typical signs of a threading problem. Make sure that
> > > > your application and threading follow the advice here:
> > > >
> > > > https://curl.se/libcurl/c/threadsafe.html
> > > >
> > > > In particular the dont-use-the-same-handle-twice rule.
> > > >
> > > > If that doesn't help, then I'd advice you to start trying to create a separate
> > > > stand-alone example code that reproduces the problem that you can share with
> > > > us.
> > > >
> > > > --
> > > >
> > > > / daniel.haxx.se
> > > > | Commercial curl support up to 24x7 is available!
> > > > | Private help, bug fixes, support, ports, new features
> > > > | https://curl.se/support.html
-- Unsubscribe: https://lists.haxx.se/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.htmlReceived on 2022-02-28