ACK: [SRU][N][PATCH 0/1] CVE-2024-56582

Jose Ogando jose.ogando at canonical.com
Fri Feb 7 16:20:39 UTC 2025


Looks good.

Acked-by: Jose Ogando <jose.ogando at canonical.com>

On Fri, 2025-02-07 at 10:10 +0100, Massimiliano Pellizzer wrote:
> [Impact]
> 
> btrfs: fix use-after-free in btrfs_encoded_read_endio()
> 
> Tthe following use-after free that sometimes is
> happening in our CI system when running fstests' btrfs/284 on a TCMU
> runner device:
> 
>   BUG: KASAN: slab-use-after-free in lock_release+0x708/0x780
>   Read of size 8 at addr ffff888106a83f18 by task kworker/u80:6/219
> 
> To fix this, change atomic_dec_return() to atomic_dec_and_test() to
> fix the
> corruption, as atomic_dec_return() is defined as two instructions on
> x86_64, whereas atomic_dec_and_test() is defined as a single atomic
> operation. This can lead to a situation where counter value is
> already
> decremented but the if statement in btrfs_encoded_read_endio() is not
> completely processed, i.e. the 0 test has not completed. If another
> thread
> continues executing btrfs_encoded_read_regular_fill_pages() the
> atomic_dec_return() there can see an already updated ->pending
> counter and
> continues by freeing the private data. Continuing in the endio
> handler the
> test for 0 succeeds and the wait_queue is woken up, resulting in a
> use-after-free.
> 
> [Fix]
> 
> Oracular: Fixed via upstream stable updates (LP: #2096744)
> Noble: Cherry picked from linux-6.6.y
> Jammy: Not affected
> Focal: Not affected
> 
> [Test case]
> 
> Compile and boot tested.
> Moreover, tested a btrfs partition using stress-ng:
> 
> $ sudo stress-ng --hdd 4 --timeout 300s --aggressive --metrics
> stress-ng: metrc: [3992] stressor       bogo ops real time  usr time 
> sys time   bogo ops/s     bogo ops/s CPU used per       RSS Max
> stress-ng: metrc: [3992]                           (secs)   
> (secs)    (secs)   (real time) (usr+sys time) instance (%)         
> (KB)
> stress-ng: metrc: [3992] hdd             1591050    300.02    
> 23.79     77.66      5303.19       15682.33         8.45        
> 10648
> stress-ng: info:  [3992] skipped: 0
> stress-ng: info:  [3992] passed: 3: hdd (3)
> stress-ng: info:  [3992] failed: 0
> stress-ng: info:  [3992] metrics untrustworthy: 0
> stress-ng: info:  [3992] successful run completed in 5 mins, 0.03
> secs
> 
> [Where problems could occur]
> 
> The fix affects the Btrfs implementation. An issue with this fix may
> lead to instability in filesystem I/O operations. A user might
> experience file read errors, data corruption during high I/O
> workloads,
> or kernel panics.
> 
> Johannes Thumshirn (1):
>   btrfs: fix use-after-free in btrfs_encoded_read_endio()
> 
>  fs/btrfs/inode.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> -- 
> 2.43.0
> 
> 




More information about the kernel-team mailing list