mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
ipmi: Fix handling of messages with provided receive message pointer
Prior to commitb52da4054e("ipmi: Rework user message limit handling"), i_ipmi_request() used to increase the user reference counter if the receive message is provided by the caller of IPMI API functions. This is no longer the case. However, ipmi_free_recv_msg() is still called and decreases the reference counter. This results in the reference counter reaching zero, the user data pointer is released, and all kinds of interesting crashes are seen. Fix the problem by increasing user reference counter if the receive message has been provided by the caller. Fixes:b52da4054e("ipmi: Rework user message limit handling") Reported-by: Eric Dumazet <edumazet@google.com> Cc: Eric Dumazet <edumazet@google.com> Cc: Greg Thelen <gthelen@google.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Message-ID: <20251006201857.3433837-1-linux@roeck-us.net> Signed-off-by: Corey Minyard <corey@minyard.net>
This commit is contained in:
committed by
Corey Minyard
parent
4af66c2bca
commit
e2c69490dd
@@ -2301,8 +2301,11 @@ static int i_ipmi_request(struct ipmi_user *user,
|
||||
if (supplied_recv) {
|
||||
recv_msg = supplied_recv;
|
||||
recv_msg->user = user;
|
||||
if (user)
|
||||
if (user) {
|
||||
atomic_inc(&user->nr_msgs);
|
||||
/* The put happens when the message is freed. */
|
||||
kref_get(&user->refcount);
|
||||
}
|
||||
} else {
|
||||
recv_msg = ipmi_alloc_recv_msg(user);
|
||||
if (IS_ERR(recv_msg))
|
||||
|
||||
Reference in New Issue
Block a user