RE: [PATCH v2 1/3] mfd: syscon: Fix race in device_node_get_regmap()

From: Pankaj Dubey
Date: Sun Dec 22 2024 - 21:14:43 EST




> -----Original Message-----
> From: Rob Herring (Arm) <robh@xxxxxxxxxx>
> Sent: Tuesday, December 17, 2024 11:42 PM
> To: Lee Jones <lee@xxxxxxxxxx>; Arnd Bergmann <arnd@xxxxxxxx>; Pankaj
> Dubey <pankaj.dubey@xxxxxxxxxxx>; Heiko Stuebner <heiko@xxxxxxxxx>;
> Liviu Dudau <liviu.dudau@xxxxxxx>; Sudeep Holla <sudeep.holla@xxxxxxx>;
> Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
> Cc: Peter Griffin <peter.griffin@xxxxxxxxxx>; Will McVicker
> <willmcvicker@xxxxxxxxxx>; John Madieu <john.madieu.xa@xxxxxxxxxxxxxx>;
> Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>; linux-
> kernel@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
> Subject: [PATCH v2 1/3] mfd: syscon: Fix race in device_node_get_regmap()
>
> It is possible for multiple, simultaneous callers calling
> device_node_get_regmap() with the same node to fail to find an entry in the
> syscon_list. There is a period of time while the first caller is calling
> of_syscon_register() that subsequent callers also fail to find an entry in the
> syscon_list and then call of_syscon_register() a second time.
>
> Fix this by keeping the lock held until after of_syscon_register() completes and
> adds the node to syscon_list. Convert the spinlock to a mutex as many of the
> functions called in of_syscon_register() such as
> kzalloc() and of_clk_get() may sleep.
>
> Fixes: bdb0066df96e ("mfd: syscon: Decouple syscon interface from platform
> devices")
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
> Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx>
> Signed-off-by: Rob Herring (Arm) <robh@xxxxxxxxxx>
> ---

Reviewed-by: Pankaj Dubey <pankaj.dubey@xxxxxxxxxxx>