[Bug 267294] inquiry_result() in ng_hci_event.c ought to check before calling m_copydata()
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 267294] inquiry_result() in ng_hci_event.c ought to check before calling m_copydata()"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 267294] inquiry_result() in ng_hci_event.c ought to check before calling m_copydata()"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 23 Oct 2022 17:05:15 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=267294 Bug ID: 267294 Summary: inquiry_result() in ng_hci_event.c ought to check before calling m_copydata() Product: Base System Version: CURRENT Hardware: Any OS: Any Status: New Severity: Affects Some People Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: rtm@lcs.mit.edu Attachment #237561 text/plain mime type: Created attachment 237561 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=237561&action=edit trigger an m_copydata() panic in ng_hci_event.c If a netgraph data message arriving on a bluetooth hci drv hook is short, inquiry_result() can trigger a panic in m_copydata(): inquiry_result(ng_hci_unit_p unit, struct mbuf *event) { ng_hci_inquiry_result_ep *ep = NULL; ...; ep = mtod(event, ng_hci_inquiry_result_ep *); ...; for (; ep->num_responses > 0; ep->num_responses --) { m_copydata(event, 0, sizeof(bdaddr), (caddr_t) &bdaddr); And (as noted in a comment in the code) later in this function there are some more uses of the mbuf that are invalid if the message is too short. I've attached a demo: # cc ng13a.c -lnetgraph # ./a.out panic: m_copydata, length > size of mbuf chain cpuid = 2 time = 1666543254 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe0049bb6910 vpanic() at vpanic+0x151/frame 0xfffffe0049bb6960 panic() at panic+0x43/frame 0xfffffe0049bb69c0 m_copydata() at m_copydata+0x1ca/frame 0xfffffe0049bb6a40 ng_hci_process_event() at ng_hci_process_event+0x923/frame 0xfffffe0049bb6a90 ng_apply_item() at ng_apply_item+0x166/frame 0xfffffe0049bb6b20 ng_snd_item() at ng_snd_item+0x2e1/frame 0xfffffe0049bb6b60 ngd_send() at ngd_send+0x10b/frame 0xfffffe0049bb6be0 sosend_generic() at sosend_generic+0x61a/frame 0xfffffe0049bb6ca0 sosend() at sosend+0x49/frame 0xfffffe0049bb6cd0 kern_sendit() at kern_sendit+0x1b3/frame 0xfffffe0049bb6d60 sendit() at sendit+0xba/frame 0xfffffe0049bb6db0 sys_sendto() at sys_sendto+0x4d/frame 0xfffffe0049bb6e00 amd64_syscall() at amd64_syscall+0x12e/frame 0xfffffe0049bb6f30 fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe0049bb6f30 --- syscall (133, FreeBSD ELF64, sys_sendto), rip = 0x8229075ca, rsp = 0x820a21068, rbp = 0x820a210d0 --- FreeBSD stock14 14.0-CURRENT FreeBSD 14.0-CURRENT #3 main-n258027-c9baa974717a: Thu Sep 15 20:02:51 AST 2022 root@stock14:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64 -- You are receiving this mail because: You are the assignee for the bug.