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= .