NACK: [SRU][F 0/9][J 0/1][PATCH v2] CVE-2024-35887

Magali Lemes magali.lemes at canonical.com
Tue Nov 19 19:46:48 UTC 2024


On 14/11/2024 17:31, Massimiliano Pellizzer wrote:
> [Impact]
> 
> ax25: fix use-after-free bugs caused by ax25_ds_del_timer
> 
> When the ax25 device is detaching, the ax25_dev_device_down()
> calls ax25_ds_del_timer() to cleanup the slave_timer. When
> the timer handler is running, the ax25_ds_del_timer() that
> calls del_timer() in it will return directly. As a result,
> the use-after-free bugs could happen.
> 
> In order to mitigate bugs, when the device is detaching, use
> timer_shutdown_sync() to stop the timer.
> 
> [Fix]
> 
> Noble:  Fixed
> Jammy:  Cherry picked from mainline
> 
> Focal:
> - Clean cherry pick of 8fd8ad5c5dfc (mainline): cherry picked since
>    it provides the definition of lockdep_assert_preemption_enabled()
> - Clean cherry pick of c725dafc95f1 (mainline): cherry picked since it
>    is a prereq for 8553b5f2774a
> - Backport of bb663f0f3c39 (mainline): backported since it is a prereq
>    for 8553b5f2774a
> - Backport of 8553b5f2774a (mainline): backported since it is a prereq
>    for 0cc04e80458a
> - Clean cherry pick of 0cc04e80458a (mainline): cherry picked since it
>    is a prereq for f571faf6e443
> - Clean cherry pick of 73737a5833ac (mainline): cherry picked since it
>    solves a compile-time error caused by f571faf6e443
> - Backport of 6e1fc2591f11 (mainline): backported since it solves a
>    compile-time error caused by f571faf6e443
> - Clean cherry pick of f571faf6e443 (mainline): cherry picked since it
>    is a prereq for the fix commit, in particular it defines
>    timer_shutdown_sync()
> - Cherry pick of the fix commit from mainline.
> 
> Bionic: Work in progress
> Xenial: Work in progress
> 
> [Test Case]
> 
> Compile and boot tested.
> Since the patch set significantly modifies the "timers" subsystem I also
> used kselftest with target "timers" to make sure the patch set does not
> introduce any regression.
> 
> [Where problems could occur]
> 
> The fix affects the net/ax25, and (for focal) the core timer subsystem.
> In Jammy a regression is not likely.
> In Focal, since the core timer subsystem has been modified
> significantly, the entire kernel could be impacted. This could lead to
> widespread timer failures, causing system instability and kernel
> crashes.
> 
> [Note]
> 
> The fix for the CVE uses the function timer_shutdown_sync(), which is
> safe to use in pretty much every context.
> This function is not implemented in Focal. The closest function to
> timer_shutdown_sync(), in Focal, is timer_delete_sync() which has strict
> requirements:
> 
>     Synchronization rules: Callers must prevent restarting of the timer,
>     otherwise this function is meaningless. It must not be called from
>     interrupt contexts unless the timer is an irqsafe one. The caller must
>     not hold locks which would prevent completion of the timer's callback
>     function. The timer's handler must not call add_timer_on(). Upon exit
>     the timer is not queued and the handler is not running on any CPU.
> 
>     For !irqsafe timers, the caller must not hold locks that are held in
>     interrupt context.
> 
> and does not implement the shutdown logic implemented by
> timer_shutdown_sync().
> For these reasons I decided to backport also patches related to timers.
> 
> [Changes between v1 and v2]
> 
> Removed the following superflows change in [F][PATCH 4/9]:
> 
> -     WARN_ON(in_irq() && !(timer->flags & TIMER_IRQSAFE));
> +     WARN_ON(hardirq_count() && !(timer->flags & TIMER_IRQSAFE));
> 
> as in_irq() is defined as:
> 
> #define in_irq() (hardirq_count())
> 
> Ahmed S. Darwish (1):
>    lockdep: Add preemption enabled/disabled assertion APIs
> 
> Duoming Zhou (1):
>    ax25: fix use-after-free bugs caused by ax25_ds_del_timer
> 
> Sebastian Andrzej Siewior (1):
>    timers: Don't block on ->expiry_lock for TIMER_IRQSAFE timers
> 
> Steven Rostedt (Google) (2):
>    clocksource/drivers/arm_arch_timer: Do not use timer namespace for
>      timer_shutdown() function
>    clocksource/drivers/sp804: Do not use timer namespace for
>      timer_shutdown() function
> 
> Thomas Gleixner (4):
>    timers: Rename del_timer() to timer_delete()
>    timers: Split [try_to_]del_timer[_sync]() to prepare for shutdown mode
>    timers: Add shutdown mechanism to the internal functions
>    timers: Provide timer_shutdown[_sync]()
> 

As Koichiro has said, it seems like we need d02e382cef06 ("timers: 
Silently ignore timers with a NULL function"). In addition to that, 
checking the original upstream submission[1], we might want to include 
82ed6f7ef58f ("timers: Replace BUG_ON()s") too.
With timer_shutdown_sync setting timer->function to NULL, these two 
additional commits seem necessary.

[1] https://lore.kernel.org/all/20221123201306.823305113@linutronix.de/

>   drivers/clocksource/arm_arch_timer.c |  12 +-
>   drivers/clocksource/timer-sp804.c    |   6 +-
>   include/linux/lockdep.h              |  19 ++
>   include/linux/timer.h                |  17 +-
>   kernel/time/timer.c                  | 254 ++++++++++++++++++++++-----
>   lib/Kconfig.debug                    |   1 +
>   net/ax25/ax25_dev.c                  |   2 +-
>   7 files changed, 253 insertions(+), 58 deletions(-)
> 



More information about the kernel-team mailing list