mirror of https://github.com/torvalds/linux.git
afs: Fix potential null pointer dereference in afs_put_server
afs_put_server() accessed server->debug_id before the NULL check, which
could lead to a null pointer dereference. Move the debug_id assignment,
ensuring we never dereference a NULL server pointer.
Fixes: 2757a4dc18 ("afs: Fix access after dec in put functions")
Cc: stable@vger.kernel.org
Signed-off-by: Zhen Ni <zhen.ni@easystack.cn>
Acked-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
66d938e89e
commit
9158c6bb24
|
|
@ -331,13 +331,14 @@ struct afs_server *afs_use_server(struct afs_server *server, bool activate,
|
||||||
void afs_put_server(struct afs_net *net, struct afs_server *server,
|
void afs_put_server(struct afs_net *net, struct afs_server *server,
|
||||||
enum afs_server_trace reason)
|
enum afs_server_trace reason)
|
||||||
{
|
{
|
||||||
unsigned int a, debug_id = server->debug_id;
|
unsigned int a, debug_id;
|
||||||
bool zero;
|
bool zero;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (!server)
|
if (!server)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
debug_id = server->debug_id;
|
||||||
a = atomic_read(&server->active);
|
a = atomic_read(&server->active);
|
||||||
zero = __refcount_dec_and_test(&server->ref, &r);
|
zero = __refcount_dec_and_test(&server->ref, &r);
|
||||||
trace_afs_server(debug_id, r - 1, a, reason);
|
trace_afs_server(debug_id, r - 1, a, reason);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue