All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Pirko <jiri@resnulli.us>
To: Ivan Vecera <ivecera@redhat.com>
Cc: netdev@vger.kernel.org,
	Vadim Fedorenko <vadim.fedorenko@linux.dev>,
	 Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>,
	Przemek Kitszel <przemyslaw.kitszel@intel.com>,
	 Milena Olech <milena.olech@intel.com>,
	Jakub Kicinski <kuba@kernel.org>,
	 open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH net] dpll: fix NULL pointer dereference in dpll_msg_add_pin_ref_sync()
Date: Mon, 13 Jul 2026 10:56:35 +0200	[thread overview]
Message-ID: <alSoPTmMA8Ge0HAX@FV6GYCPJ69> (raw)
In-Reply-To: <20260710193625.1378822-1-ivecera@redhat.com>

Fri, Jul 10, 2026 at 09:36:25PM +0200, ivecera@redhat.com wrote:
>When a dpll_pin is shared across multiple dpll_device instances and
>those devices are being unregistered (e.g. during driver module removal),
>a NULL pointer dereference can occur in dpll_msg_add_pin_ref_sync().
>
>This happens under the following conditions:
> - A pin is registered with two or more dpll devices (dpll_A, dpll_B)
> - The pin has ref_sync pairs with other pins
> - During unregistration of dpll_A's pins, a ref_sync partner pin is
>   unregistered first, removing it from dpll_A->pin_refs
> - But since the partner pin is still registered with dpll_B, its
>   dpll_refs is not empty, so dpll_pin_ref_sync_pair_del() does NOT
>   run and the partner stays in the pin's ref_sync_pins xarray
> - When the pin itself is then unregistered from dpll_A, the delete
>   notification calls dpll_msg_add_pin_ref_sync() which finds the
>   partner in ref_sync_pins, passes dpll_pin_available() (partner is
>   still registered with dpll_B), but dpll_pin_on_dpll_priv(dpll_A,
>   partner) returns NULL because partner was already removed from
>   dpll_A->pin_refs
> - The NULL priv pointer is passed to the driver's ref_sync_get
>   callback, which dereferences it
>
> BUG: kernel NULL pointer dereference, address: 0000000000000034
> Oops: Oops: 0000 [#1] SMP NOPTI
> RIP: 0010:zl3073x_dpll_input_pin_ref_sync_get+0x73/0x80 [zl3073x]
> Call Trace:
>  dpll_msg_add_pin_ref_sync+0xb8/0x200
>  dpll_cmd_pin_get_one+0x3b6/0x4b0
>  dpll_pin_event_send+0x72/0x140
>  __dpll_pin_unregister+0x5a/0x2b0
>  dpll_pin_unregister+0x49/0x70
>
>Fix this by skipping ref_sync pins whose priv pointer cannot be resolved
>for the current dpll device.
>
>Fixes: 58256a26bfb3 ("dpll: add reference sync get/set")
>Signed-off-by: Ivan Vecera <ivecera@redhat.com>

Reviewed-by: Jiri Pirko <jiri@nvidia.com>

      parent reply	other threads:[~2026-07-13  8:56 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-10 19:36 [PATCH net] dpll: fix NULL pointer dereference in dpll_msg_add_pin_ref_sync() Ivan Vecera
2026-07-10 22:56 ` Vadim Fedorenko
2026-07-13  8:56 ` Jiri Pirko [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alSoPTmMA8Ge0HAX@FV6GYCPJ69 \
    --to=jiri@resnulli.us \
    --cc=arkadiusz.kubalewski@intel.com \
    --cc=ivecera@redhat.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=milena.olech@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=przemyslaw.kitszel@intel.com \
    --cc=vadim.fedorenko@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.