From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yx1-f50.google.com (mail-yx1-f50.google.com [74.125.224.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6558D30B50A for ; Wed, 6 May 2026 19:34:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778096086; cv=none; b=BL/UZj3wt7bvyO7pixvWYUu8RtPbFanBl5gfK6GlQ5VMXJ7oJVKkUls00DmXfFowkGWpNI7ynNtLRB178NP6EKV/p6nCAdB6VGG5QIMh8iTVOziZgI7Fwjv8q+xLiMb4Lhch6NcZD6u39WbCAR77etwCDR6NWIVxcR7GMCZtwpY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778096086; c=relaxed/simple; bh=5yOmDRJWkQ4VG/V7rOIXT5728PKpPtwtAqWp9eTLsJE=; h=Date:From:To:Cc:Message-ID:In-Reply-To:References:Subject: Mime-Version:Content-Type; b=aBNLrGfIHp9FzXPoYgoXtRDAN2bY+3h/LAOHDEH+Yfw6K/QSzc5smimvQQLpdt949M4o9IKylYiZ5Zh3BD/5KxwLyMxY4qxKtNMixGlpLY729/YLpwjwq2QpOc6EP+1t5irhcwRLc3o4J0fzD1fh7rrxzoZZPZKW9d6W++vtiW0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OLiUfVj2; arc=none smtp.client-ip=74.125.224.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OLiUfVj2" Received: by mail-yx1-f50.google.com with SMTP id 956f58d0204a3-65c09c1d000so1151903d50.1 for ; Wed, 06 May 2026 12:34:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778096083; x=1778700883; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=Sp0M4sn108wJFjNlGoJSEJcEfpd1a9QgqV/Z0Ft6epA=; b=OLiUfVj2gpbxeehgSZ/7s3vaNX+AsX/VZbFrpqnLq9CM1LoQCjV1Q5ZNM3Xizgegfx PFjAR1JQe2l/jsBijut2EluhKLEf9CRWlMqr+JKLb2LDW2dfO6QRGpn6ojzvDbEnzwnk MlcZE+9x8DQSMDP8Ft5ZCF05bICgEnU54DF6Yk3l7wg9d/CP6eaoxyD7sja/xxJack3+ dmH6oL03WDJRbfsUOxP2Bw0qclhKeMAdUBZX9LoZad8JS4DOtPNeP5cI2/R2vaJkbDIb 7bieX/WHFwiU/fnFOIrN/Y8jEUZ1ul3MP+Ll2E1483X1/zZLz1vM69IVgtmDtYQOKY0B yJgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778096083; x=1778700883; h=content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Sp0M4sn108wJFjNlGoJSEJcEfpd1a9QgqV/Z0Ft6epA=; b=Vp7RtiSMdKSAcO05TPiIDZMMD9Rsw6IgsZS7yqkN9hPFY7qbq+J0rmxhz0DOjwIfXV a8Dm/WuxYZUdUirGsF1rCPEwl5y55u+nZebdFKDMsDGv1tJNTxXA1qIlHmPbZCYaqlE9 u+gGXOik25DauCK0I+vEOmMnAXGRy9mSbgSte0EnvN1ZOwvf6Xh3O9FbBiezCB5WX0t/ SpznwsRmh0VH6P6oPqjYwaahieqTiASH9/EFA2wzKk7ti8Ph/aa+519QxaCxFOXnJsyt AtqHqA3f89Ns6kBFlkvgQcVa5RujsmtgvV4z15k2fypCtp1zGPFYQBvf3xy3zUAzFbBy 1E2Q== X-Forwarded-Encrypted: i=1; AFNElJ/fihze9bWeIw10Rsxltx0Od2u5IjSQq58DF1dn5J82LJrLNPmh/59CQ1ZZu+rzy8lRxugdAVwASpXUk3I=@vger.kernel.org X-Gm-Message-State: AOJu0YxAgh6MjePam37L80HqVtrUGA245IEw/dinbiHxZC0GTUbMKJg9 IlO2oyeWKa1HU35c9RcUePg4MgEU6DCtBquzoFTT68oIX1cRferm25gq X-Gm-Gg: AeBDietjG37+RRkJa+V1Tc1koQUvSR/tybZYjdhOyArJ6NSOGO2Bx2kHKvQsohdl+qf RB9rfzNTfVpr8zPoLtH5kRHxHFpn9imr09f3koC0EAKDBf5YlT90j//kr8PpfTizeVgBFbgDS76 ghPVixcpAtnmIhGcleboM02YvYZQ3+mzwpKT2KKvAUzOGXNO5RynLm4O8aMBD77R1WOz9n3ceNx ZFtsV82vqKzhz62a3+bu9FzAFIG+EwtO6kcHUKNWxqonboH9arM90RYu1TraoLoPQynKLPPUkH8 CGvxQYrOVcvrSR7qr+X7CoC2t87qRPv12o3f6ZQbUCyeeUid733vRqKlGNR8mBZXQkpD9vfoVwu P9U7FpZzlACURRZbj2S73sa5Opc2rHBgIrWNrdOOrUmCNsZ8GhjJrLWYHMU/n368NQoiMkOpG+a E3uNu7dOBr6db+Prj6Ch78tqc/zMbBmFkEyLncZEuvLCYcHmEC5r3gUo1NEPiJgNFZ41STb7gfl eSpYqxIxJ0MgjI= X-Received: by 2002:a05:690c:388:b0:7b2:cfae:8a0a with SMTP id 00721157ae682-7bdf6022205mr39159647b3.0.1778096083160; Wed, 06 May 2026 12:34:43 -0700 (PDT) Received: from gmail.com (172.235.85.34.bc.googleusercontent.com. [34.85.235.172]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7bd66888cc7sm82283737b3.44.2026.05.06.12.34.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 12:34:42 -0700 (PDT) Date: Wed, 06 May 2026 15:34:42 -0400 From: Willem de Bruijn To: Daniel Zahka , Jakub Kicinski , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn , Willem de Bruijn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Message-ID: In-Reply-To: <20260505-psd-rcu-v1-3-a8f69ec1ab96@gmail.com> References: <20260505-psd-rcu-v1-0-a8f69ec1ab96@gmail.com> <20260505-psd-rcu-v1-3-a8f69ec1ab96@gmail.com> Subject: Re: [PATCH net 3/3] netdevsim: psp: rcu protect psp_dev reference Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Daniel Zahka wrote: > There are two issues with the way psp_dev is used in nsim_do_psp(): > > 1. There is no check for IS_ERR() on the peers psp_dev, before > dereferencing. > 2. The refcount on this psp_dev can be dropped by > nsim_psp_rereg_write() > > To fix this, we can make netdevsim's reference to its psp_dev an rcu > reference, and then nsim_do_psp() can read the fields it needs from an > rcu critical section. > > Fixes: f857478d6206 ("netdevsim: a basic test PSP implementation") > Assisted-by: Claude:claude-opus-4.6 > Signed-off-by: Daniel Zahka > static ssize_t > @@ -228,16 +237,23 @@ nsim_psp_rereg_write(struct file *file, const char __user *data, size_t count, > loff_t *ppos) > { > struct netdevsim *ns = file->private_data; > - int err; > + struct psp_dev *psd; > + ssize_t ret; > > mutex_lock(&ns->psp.rereg_lock); > - __nsim_psp_uninit(ns); > + __nsim_psp_uninit(ns, false); > + > + psd = psp_dev_create(ns->netdev, &nsim_psp_ops, &nsim_psp_caps, ns); > + if (IS_ERR(psd)) { > + ret = PTR_ERR(psd); > + goto out; > + } Do you want to create the new device first and only delete the old state if that succeeds? To avoid a netdevsim in state without dev. > > - ns->psp.dev = psp_dev_create(ns->netdev, &nsim_psp_ops, > - &nsim_psp_caps, ns); > - err = PTR_ERR_OR_ZERO(ns->psp.dev); > + rcu_assign_pointer(ns->psp.dev, psd); > + ret = count; > +out: > mutex_unlock(&ns->psp.rereg_lock); > - return err ?: count; > + return ret; > } >