Re: [PATCH RFC] libceph: validate banner payload length

Aleksandr Nogikh <[email protected]> Fri, 31 Jul 2026 12:10:07 +0200
Newsgroups dev.linux.lists.syzbot
Message-ID <CANp29Y6oPs4vTeE-pw+5EybTeK5UewTkLLbXT4EwO8gP__9SgQ@mail.gmail.com>
#syz upstream

On Fri, Jul 31, 2026 at 11:52=E2=80=AFAM 'syzbot' via
syzkaller-upstream-moderation
<[email protected]> wrote:
>
> When parsing the Ceph messenger v2 protocol banner, the `payload_len` fie=
ld
> is decoded from the banner prefix. If a client sends a banner with a
> `payload_len` of 0, the kernel sets up a 0-length socket read. This
> violates an invariant in the state machine, triggering a warning in
> `populate_in_iter()`:
>
> ------------[ cut here ]------------
> !iov_iter_count(&con->v2.in_iter)
> WARNING: net/ceph/messenger_v2.c:3129 at populate_in_iter
> net/ceph/messenger_v2.c:3129 [inline], CPU#1: kworker/1:3/5070
> WARNING: net/ceph/messenger_v2.c:3129 at ceph_con_v2_try_read+0x6634/0x68=
10
> net/ceph/messenger_v2.c:3159, CPU#1: kworker/1:3/5070
> ...
> Call Trace:
>  <TASK>
>  ceph_con_workfn+0x1f5/0x14a0 net/ceph/messenger.c:1575
>  process_one_work kernel/workqueue.c:3322 [inline]
>  process_scheduled_works+0xa8e/0x14e0 kernel/workqueue.c:3405
>  worker_thread+0xa47/0xfb0 kernel/workqueue.c:3486
>  kthread+0x388/0x470 kernel/kthread.c:436
>  ret_from_fork+0x514/0xb70 arch/x86/kernel/process.c:158
>  ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
>  </TASK>
>
> According to the msgr2 protocol specification, the banner payload is
> expected to contain at least two 64-bit integers (`server_feat` and
> `server_req_feat`). Therefore, `payload_len` must be at least 16 bytes.
>
> Fix this by adding a check in `process_banner_prefix()` to reject a
> `payload_len` smaller than 16 bytes. This prevents the 0-length read and
> correctly aborts the connection with a protocol error.
>
> Fixes: cd1a677cad99 ("libceph, ceph: implement msgr2.1 protocol (crc and =
secure modes)")
> Assisted-by: Gemini:gemini-3.5-flash Gemini:gemini-3.1-pro-preview syzbot
> Reported-by: [email protected]
> Closes: https://syzkaller.appspot.com/bug?extid=3D87c7c2d63c44e41c77a3
> Link: https://syzkaller.appspot.com/ai_job?id=3Dc8ca3d63-717a-4933-89ec-f=
3d761b8690d
> To: "Alex Markuze" <[email protected]>
> To: <[email protected]>
> To: "Ilya Dryomov" <[email protected]>
> To: "Viacheslav Dubeyko" <[email protected]>
> Cc: <[email protected]>
>
> ---
> diff --git a/net/ceph/messenger_v2.c b/net/ceph/messenger_v2.c
> index 05f6eea29..b323b61e7 100644
> --- a/net/ceph/messenger_v2.c
> +++ b/net/ceph/messenger_v2.c
> @@ -2142,6 +2142,11 @@ static int process_banner_prefix(struct ceph_conne=
ction *con)
>         payload_len =3D ceph_decode_16(&p);
>         dout("%s con %p payload_len %d\n", __func__, con, payload_len);
>
> +       if (payload_len < sizeof(u64) + sizeof(u64)) {
> +               con->error_msg =3D "protocol error, bad banner payload le=
n";
> +               return -EINVAL;
> +       }
> +
>         return prepare_read_banner_payload(con, payload_len);
>  }
>
>
>
> base-commit: f5098b6bae761e346ebcd9da7f95622c04733cff
> --
> This is an AI-generated patch subject to moderation.
> Reply with '#syz upstream' to Sign-off the patch as a human author
> and send it to the upstream kernel mailing lists.
> Reply with '#syz reject' to reject it ('#syz unreject' to undo).
>
> See https://goo.gle/syzbot-ai-patches for information about AI-generated =
patches.
> You can comment on the patch as usual, syzbot will try to address
> the comments and send a new version of the patch if necessary.
> syzbot engineers can be reached at [email protected].
>
> --
> You received this message because you are subscribed to the Google Groups=
 "syzkaller-upstream-moderation" group.
> To unsubscribe from this group and stop receiving emails from it, send an=
 email to [email protected].
> To view this discussion visit https://groups.google.com/d/msgid/syzkaller=
-upstream-moderation/10fa68ab-b588-4ca1-8ac1-dd13a95cff91%40mail.kernel.org=
.