diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2025-11-27 11:11:03 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2025-11-27 11:11:03 -0800 |
| commit | e1afacb68573c3cd0a3785c6b0508876cd3423bc (patch) | |
| tree | 455f83deddb63b4a27b03a9b9da7a5f35f4f5038 /net/ceph/messenger_v2.c | |
| parent | 1f5e808aa63af61ec0d6a14909056d6668813e86 (diff) | |
| parent | 7fce830ecd0a0256590ee37eb65a39cbad3d64fc (diff) | |
| download | linux-e1afacb68573c3cd0a3785c6b0508876cd3423bc.tar.gz linux-e1afacb68573c3cd0a3785c6b0508876cd3423bc.tar.bz2 linux-e1afacb68573c3cd0a3785c6b0508876cd3423bc.zip | |
Merge tag 'ceph-for-6.18-rc8' of https://github.com/ceph/ceph-client
Pull ceph fixes from Ilya Dryomov:
"A patch to make sparse read handling work in msgr2 secure mode from
Slava and a couple of fixes from Ziming and myself to avoid operating
on potentially invalid memory, all marked for stable"
* tag 'ceph-for-6.18-rc8' of https://github.com/ceph/ceph-client:
libceph: prevent potential out-of-bounds writes in handle_auth_session_key()
libceph: replace BUG_ON with bounds check for map->max_osd
ceph: fix crash in process_v2_sparse_read() for encrypted directories
libceph: drop started parameter of __ceph_open_session()
libceph: fix potential use-after-free in have_mon_and_osd_map()
Diffstat (limited to 'net/ceph/messenger_v2.c')
| -rw-r--r-- | net/ceph/messenger_v2.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/ceph/messenger_v2.c b/net/ceph/messenger_v2.c index 9e39378eda00..9e48623018a3 100644 --- a/net/ceph/messenger_v2.c +++ b/net/ceph/messenger_v2.c @@ -1061,13 +1061,16 @@ static int decrypt_control_remainder(struct ceph_connection *con) static int process_v2_sparse_read(struct ceph_connection *con, struct page **pages, int spos) { - struct ceph_msg_data_cursor *cursor = &con->v2.in_cursor; + struct ceph_msg_data_cursor cursor; int ret; + ceph_msg_data_cursor_init(&cursor, con->in_msg, + con->in_msg->sparse_read_total); + for (;;) { char *buf = NULL; - ret = con->ops->sparse_read(con, cursor, &buf); + ret = con->ops->sparse_read(con, &cursor, &buf); if (ret <= 0) return ret; @@ -1085,11 +1088,11 @@ static int process_v2_sparse_read(struct ceph_connection *con, } else { struct bio_vec bv; - get_bvec_at(cursor, &bv); + get_bvec_at(&cursor, &bv); len = min_t(int, len, bv.bv_len); memcpy_page(bv.bv_page, bv.bv_offset, spage, soff, len); - ceph_msg_data_advance(cursor, len); + ceph_msg_data_advance(&cursor, len); } spos += len; ret -= len; |
