]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
libceph: Prevent potential null-ptr-deref in ceph_handle_auth_reply()
authorRaphael Zimmer <raphael.zimmer@tu-ilmenau.de>
Wed, 18 Mar 2026 17:09:03 +0000 (18:09 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 21 Apr 2026 23:40:22 +0000 (01:40 +0200)
If a message of type CEPH_MSG_AUTH_REPLY contains a zero value for both
protocol and result, this is currently not treated as an error. In case
of ac->negotiating == true and ac->protocol > 0, this leads to setting
ac->protocol = 0 and ac->ops = NULL. Thereafter, the check for
ac->protocol != protocol returns false, and init_protocol() is not
called. Subsequently, ac->ops->handle_reply() is called, which leads to
a null pointer dereference, because ac->ops is still NULL.

This patch changes the check for ac->protocol != protocol to
!ac->protocol, as this also includes the case when the protocol was set
to zero in the message. This causes the message to be treated as
containing a bad auth protocol.

Cc: stable@vger.kernel.org
Signed-off-by: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
net/ceph/auth.c

index 901b93530b214404ab2d0aecec8fbddb9e179c84..3314705e591466d617e5074c3cef8a9b82f6df4c 100644 (file)
@@ -245,7 +245,7 @@ int ceph_handle_auth_reply(struct ceph_auth_client *ac,
                        ac->protocol = 0;
                        ac->ops = NULL;
                }
-               if (ac->protocol != protocol) {
+               if (!ac->protocol) {
                        ret = init_protocol(ac, protocol);
                        if (ret) {
                                pr_err("auth protocol '%s' init failed: %d\n",