mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 01:32:21 +02:00
libceph: bound get_version reply decode to front len
handle_get_version_reply() uses msg->front_alloc_len as the decode
boundary for MON_GET_VERSION_REPLY. That is the size of the reused
reply buffer, not the number of bytes actually received.
A truncated reply can therefore pass ceph_decode_need() and decode the
second u64 from stale tail bytes left in the buffer by an earlier
message, causing an uninitialized memory read.
Use msg->front.iov_len as the receive-side decode boundary, matching
other libceph reply handlers and limiting decoding to the bytes that
were actually read from the wire.
Cc: stable@vger.kernel.org
Fixes: 513a8243d6 ("libceph: mon_get_version request infrastructure")
Reported-by: Yuan Tan <yuantan098@gmail.com>
Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
Reported-by: Xin Liu <bird@lzu.edu.cn>
Assisted-by: Codex:GPT-5.4
Signed-off-by: Douya Le <ldy3087146292@gmail.com>
Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
cbf59617cd
commit
d3c32939fa
|
|
@ -821,7 +821,7 @@ static void handle_get_version_reply(struct ceph_mon_client *monc,
|
|||
struct ceph_mon_generic_request *req;
|
||||
u64 tid = le64_to_cpu(msg->hdr.tid);
|
||||
void *p = msg->front.iov_base;
|
||||
void *end = p + msg->front_alloc_len;
|
||||
void *const end = p + msg->front.iov_len;
|
||||
u64 handle;
|
||||
|
||||
dout("%s msg %p tid %llu\n", __func__, msg, tid);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user