Skip to content

Commit 6595beb

Browse files
PwnVersePaolo Abeni
authored andcommitted
net: rose: fix invalid array index in rose_kill_by_device()
rose_kill_by_device() collects sockets into a local array[] and then iterates over them to disconnect sockets bound to a device being brought down. The loop mistakenly indexes array[cnt] instead of array[i]. For cnt < ARRAY_SIZE(array), this reads an uninitialized entry; for cnt == ARRAY_SIZE(array), it is an out-of-bounds read. Either case can lead to an invalid socket pointer dereference and also leaks references taken via sock_hold(). Fix the index to use i. Fixes: 64b8bc7 ("net/rose: fix races in rose_kill_by_device()") Co-developed-by: Fatma Alwasmi <[email protected]> Signed-off-by: Fatma Alwasmi <[email protected]> Signed-off-by: Pwnverse <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent 5939b6d commit 6595beb

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

net/rose/af_rose.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ static void rose_kill_by_device(struct net_device *dev)
205205
spin_unlock_bh(&rose_list_lock);
206206

207207
for (i = 0; i < cnt; i++) {
208-
sk = array[cnt];
208+
sk = array[i];
209209
rose = rose_sk(sk);
210210
lock_sock(sk);
211211
spin_lock_bh(&rose_list_lock);

0 commit comments

Comments
 (0)