From owner-freebsd-current@freebsd.org Wed Dec 2 23:20:41 2020 Return-Path: Delivered-To: freebsd-current@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CCC8A470EB5 for ; Wed, 2 Dec 2020 23:20:41 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: from mail-oi1-f175.google.com (mail-oi1-f175.google.com [209.85.167.175]) (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 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4CmZhS4hBWz4Rjg; Wed, 2 Dec 2020 23:20:40 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: by mail-oi1-f175.google.com with SMTP id y74so193576oia.11; Wed, 02 Dec 2020 15:20:40 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:reply-to :from:date:message-id:subject:to:cc; bh=uGMMwwge7927NBf1OAphBhdZnbUsBJVeaZtjSVqBZU8=; b=Uo1H3KjPf+1UnIyvnPuKnWcVW6VlO2K2givifEbCve2BJ3QNdgHA1YVV22PrBef6D8 L5r7IJtx/OIVrCDlKmJOg7Dr/FDN3BDyWjOSYJVL2zLBMi9I1xbX24TgvlUHW0QsZsse LCiH7Ieq6Bqshgm5jHzAXmkKmrsNP9LwIgSoX93ILazWbmEGYjMr3ebL+mrt0UX4ai8v QU+7QkpIa6rLQ61gl25xvNN/9n6FT1ekiIsrQbWKhszkD2iCH/QzNRLNB3rRImfc8ulU LqeKxzbJUBS1BV8bLn9VYWsDDBg6HxxGsdwnP0GIiGTN3RqxlX/UXZzKVgBa0Piv92OG gixg== X-Gm-Message-State: AOAM531HGQHKG0IDzDMo0TKIp65V3SY6LLGoQStDujzX5vpm0KYSQDFj Ox+R94nnCBo/4u/DVbOVUDe5q1UA+14= X-Google-Smtp-Source: ABdhPJxpERLVGtLZJY4EnlwZFMSUuvx0PTEJKWsbtwidFoOFy9eo2G5SFk2nk74h1hfrI78KIRcN/A== X-Received: by 2002:aca:6255:: with SMTP id w82mr109168oib.5.1606951239192; Wed, 02 Dec 2020 15:20:39 -0800 (PST) Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com. [209.85.167.178]) by smtp.gmail.com with ESMTPSA id k25sm16880oik.31.2020.12.02.15.20.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 02 Dec 2020 15:20:38 -0800 (PST) Received: by mail-oi1-f178.google.com with SMTP id y74so193541oia.11; Wed, 02 Dec 2020 15:20:38 -0800 (PST) X-Received: by 2002:aca:2301:: with SMTP id e1mr132845oie.8.1606951238792; Wed, 02 Dec 2020 15:20:38 -0800 (PST) MIME-Version: 1.0 References: <5b827768-eb46-07f3-5b44-49627779786e@FreeBSD.org> In-Reply-To: <5b827768-eb46-07f3-5b44-49627779786e@FreeBSD.org> Reply-To: cem@freebsd.org From: Conrad Meyer Date: Wed, 2 Dec 2020 15:20:28 -0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: rand() is racy in multi-threaded programs? To: Andriy Gapon Cc: FreeBSD Current X-Rspamd-Queue-Id: 4CmZhS4hBWz4Rjg X-Spamd-Bar: - X-Spamd-Result: default: False [-2.00 / 15.00]; HAS_REPLYTO(0.00)[cem@freebsd.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17]; REPLYTO_ADDR_EQ_FROM(0.00)[]; RCVD_COUNT_THREE(0.00)[4]; TO_DN_ALL(0.00)[]; NEURAL_HAM_SHORT(-1.00)[-1.000]; RCPT_COUNT_TWO(0.00)[2]; FORGED_SENDER(0.30)[cem@freebsd.org,csecem@gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:~]; FREEMAIL_ENVFROM(0.00)[gmail.com]; RBL_DBL_DONT_QUERY_IPS(0.00)[209.85.167.175:from]; R_DKIM_NA(0.00)[]; TAGGED_FROM(0.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; FROM_NEQ_ENVFROM(0.00)[cem@freebsd.org,csecem@gmail.com]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; DMARC_NA(0.00)[freebsd.org]; SPAMHAUS_ZRD(0.00)[209.85.167.175:from:127.0.2.255]; SUBJECT_ENDS_QUESTION(1.00)[]; RCVD_IN_DNSWL_NONE(0.00)[209.85.167.175:from]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.167.175:from]; RCVD_TLS_ALL(0.00)[]; MAILMAN_DEST(0.00)[freebsd-current] Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.34 X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Dec 2020 23:20:41 -0000 Hi Andriy, Rand(3) is explicitly unsafe to use from concurrent threads without some external serialization, even after initialization. I=E2=80=99d suggest usin= g a different API. Best, Conrad On Wed, Dec 2, 2020 at 13:53 Andriy Gapon wrote: > > Specifically, concurrent "first" calls to rand(). > There can be a moment when rand3_state is allocated but not completely se= t > up > with initstate_r(). > Is this a known / documented issue? > Should we try to do better? > > P.S. > I am seeing this issue from time to time when running ztest program (from > ZFS). > I guess that it uses rand() just because that's what OpenZFS did / does o= n > illumos and Linux. > > P.P.S. > Just realized that the problem can be relatively recent. > https://svnweb.freebsd.org/base?view=3Drevision&revision=3D357382 > > -- > Andriy Gapon >