From nobody Fri Mar 1 10:22:35 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TmPKs2ddPz5CM8r for ; Fri, 1 Mar 2024 10:22:41 +0000 (UTC) (envelope-from paulf2718@gmail.com) Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TmPKr3f9Zz51gV for ; Fri, 1 Mar 2024 10:22:40 +0000 (UTC) (envelope-from paulf2718@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20230601 header.b=G9vSo0Xi; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of paulf2718@gmail.com designates 2a00:1450:4864:20::436 as permitted sender) smtp.mailfrom=paulf2718@gmail.com Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-33ddd1624beso1218296f8f.1 for ; Fri, 01 Mar 2024 02:22:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709288558; x=1709893358; darn=freebsd.org; h=content-transfer-encoding:subject:from:content-language:to :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=0MQcV8jKTYnvRwwmFroR0GlLKobEB7idAkPsnIihg3E=; b=G9vSo0XiUToBjAImXxkxqb/GBj6STg6OqbUZYfsEvn/CCTWvNWmdELLiio8SeRXLO9 BV0QdIDQBZp1CYelkinVYTmg829dXnRrgXZzncgpJDyUzaRGTqplTTNo5YyO7muZMAKp kQfgd0khtq0VdWIYYmj9VrCZePggF9FbN1Yrf58g3aDf8+gBJCrjZK/5Vuykw/pYQIYC GpO9yYb9QhmJSqBZK27qcaisdx+ddI84tHMR3HYsKj3DBUCAW6ukLqaH4ViW1I9S1QF/ jfhR483kDmJHGrs0DbzQgx2PUMNKm3vgZte+qOFomj2iFDnXISUi6AhfYUlzivy1ZhFd rF9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709288558; x=1709893358; h=content-transfer-encoding:subject:from:content-language:to :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=0MQcV8jKTYnvRwwmFroR0GlLKobEB7idAkPsnIihg3E=; b=QClCClA4fGpxMNlioDJkS1pBrM6yNSRddwBS29FEg18WBY1GKWIpupFH5cJvppX2rf 2qQz093Q+mW4DaIAv+ufv0oqviBWbwaYDReALpXcctJk+0kW2a6zh+RrQxXpr6X1P5MP Pj/MN9PXVbJIT6q+DU7Sja94hSwtMEQdLrpnz3oRL/ZUlfljZWyY05OHxbCjoo9+5whc 3T9adGtPcnMj/MNkfoRPylE9pUdA+5GaJG05S8dJT4opkrP+u6c8ZTIzZkYVzAeZ3nf6 MiK4JwgkUr5d6M3ANwkrSerGhZUNS9fWSCNs+2f1QYucew5CWlRAUmbOZNsz8k0oKdJa VTbw== X-Gm-Message-State: AOJu0YwhYGL0I4CHhCVnGzwEGDwRgFgBAaLV90FnbmXJ3jUTRoh0HCRT ObhM94rXE6l9O2glNYATvLB+8/kX+Rib2H1vwyDyGKoquAZopESscJTRGIqw X-Google-Smtp-Source: AGHT+IFw0yiyEoKiERAIntdiXUqJPZZOdKzzpo4dYpNYst4MFQ6r+Xmm6B3LJ16UA69cRs7BpiF+ag== X-Received: by 2002:adf:c042:0:b0:33d:3f23:eea7 with SMTP id c2-20020adfc042000000b0033d3f23eea7mr1084675wrf.35.1709288557415; Fri, 01 Mar 2024 02:22:37 -0800 (PST) Received: from ?IPV6:2a01:cb15:8010:2f00:1aa9:5ff:fe16:2efb? ([2a01:cb15:8010:2f00:1aa9:5ff:fe16:2efb]) by smtp.gmail.com with ESMTPSA id l9-20020a056000022900b0033cf2063052sm4127596wrz.111.2024.03.01.02.22.36 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 01 Mar 2024 02:22:37 -0800 (PST) Message-ID: <0ad962b5-2f0b-429d-a2d3-cb82a812eaf8@gmail.com> Date: Fri, 1 Mar 2024 11:22:35 +0100 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: freebsd-hackers@FreeBSD.org Content-Language: en-US From: Paul Floyd Subject: pthread cleanup functions Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.70 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.71)[-0.711]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36:c]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20230601]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; FROM_HAS_DN(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; TO_DN_NONE(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; MID_RHS_MATCH_FROM(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::436:from] X-Rspamd-Queue-Id: 4TmPKr3f9Zz51gV Hi Can anyone explain what the pthread cleanup functions do? I'm getting errors from Valgrind on arm64: ==8227== Invalid read of size 8 ==8227== at 0x48FFE78: __pthread_cleanup_pop_imp (in /lib/libthr.so.3) ==8227== Address 0x1ffeffedf0 is on thread 2's stack ==8227== 328 bytes below stack pointer I'm not doing a good job with the callstack, in gdb it's clearer and looks OK: (gdb) bt #0 __thr_cleanup_pop_imp (execute=execute@entry=1) at /usr/src/lib/libthr/thread/thr_clean.c:78 #1 0x0000000004901aa4 in _pthread_exit_mask (status=, mask=, mask@entry=0x1ffeffefa8) at /usr/src/lib/libthr/thread/thr_exit.c:260 #2 0x0000000004901944 in _Tthr_exit (status=0x1) at /usr/src/lib/libthr/thread/thr_exit.c:207 #3 0x0000000004901350 in thread_start (curthread=0x557c780) at /usr/src/lib/libthr/thread/thr_create.c:290 #4 0x0000000004900ec0 in _pthread_create (thread=0x1ffffff930, attr=, start_routine=, arg=) at /usr/src/lib/libthr/thread/thr_create.c:185 #5 0x0000000000210840 in main () at pthread.c:22 That's on line 78 below. curthread->cleanup is not NULL but it points to invalid memory. 71 void 72 __thr_cleanup_pop_imp(int execute) 73 { 74 struct pthread *curthread = _get_curthread(); 75 struct pthread_cleanup *old; 76 77 if ((old = curthread->cleanup) != NULL) { 78 curthread->cleanup = old->prev; 79 if (execute) 80 old->routine(old->routine_arg); 81 if (old->onheap) 82 free(old); 83 } 84 } This is just running a trivial example #include #include void* func(void* arg) { int a; fprintf(stderr, "in func arg passed is %p\n", arg); fprintf(stderr, "in func arg my stack is around %p\n", &a); return NULL; } int main(void) { int arg = 42; pthread_t tid; fprintf(stderr, "arg passed is %p\n", &arg); pthread_create(&tid, NULL, func, &arg); pthread_join(tid, NULL); } A+ Paul