summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2026-04-24 13:47:19 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2026-04-24 13:47:19 -0700
commitac2dc6d57425ffa9629941d7c9d7c0e51082cb5a (patch)
tree1a63ab616fe8a13d2f37772290c4aa6f8a1323ae /net
parentff9726d7a0068e6c2ae1969415285d12ef4d5c6f (diff)
parentb1137e0b3d4bad1cad73fa9bac763c74ddd1813d (diff)
downloadlinux-next-ac2dc6d57425ffa9629941d7c9d7c0e51082cb5a.tar.gz
linux-next-ac2dc6d57425ffa9629941d7c9d7c0e51082cb5a.zip
Merge tag 'ceph-for-7.1-rc1' of https://github.com/ceph/ceph-client
Pull ceph updates from Ilya Dryomov: "We have a series from Alex which extends CephFS client metrics with support for per-subvolume data I/O performance and latency tracking (metadata operations aren't included) and a good variety of fixes and cleanups across RBD and CephFS" * tag 'ceph-for-7.1-rc1' of https://github.com/ceph/ceph-client: ceph: add subvolume metrics collection and reporting ceph: parse subvolume_id from InodeStat v9 and store in inode ceph: handle InodeStat v8 versioned field in reply parsing libceph: Fix slab-out-of-bounds access in auth message processing rbd: fix null-ptr-deref when device_add_disk() fails crush: cleanup in crush_do_rule() method ceph: clear s_cap_reconnect when ceph_pagelist_encode_32() fails ceph: only d_add() negative dentries when they are unhashed libceph: update outdated comment in ceph_sock_write_space() libceph: Remove obsolete session key alignment logic ceph: fix num_ops off-by-one when crypto allocation fails libceph: Prevent potential null-ptr-deref in ceph_handle_auth_reply()
Diffstat (limited to 'net')
-rw-r--r--net/ceph/auth.c4
-rw-r--r--net/ceph/crush/mapper.c7
-rw-r--r--net/ceph/messenger.c4
-rw-r--r--net/ceph/messenger_v2.c13
-rw-r--r--net/ceph/mon_client.c2
5 files changed, 14 insertions, 16 deletions
diff --git a/net/ceph/auth.c b/net/ceph/auth.c
index 901b93530b21..17660bde896b 100644
--- a/net/ceph/auth.c
+++ b/net/ceph/auth.c
@@ -245,7 +245,7 @@ int ceph_handle_auth_reply(struct ceph_auth_client *ac,
ac->protocol = 0;
ac->ops = NULL;
}
- if (ac->protocol != protocol) {
+ if (!ac->protocol) {
ret = init_protocol(ac, protocol);
if (ret) {
pr_err("auth protocol '%s' init failed: %d\n",
@@ -257,7 +257,7 @@ int ceph_handle_auth_reply(struct ceph_auth_client *ac,
ac->negotiating = false;
}
- if (result) {
+ if (result < 0) {
pr_err("auth protocol '%s' mauth authentication failed: %d\n",
ceph_auth_proto_name(ac->protocol), result);
ret = result;
diff --git a/net/ceph/crush/mapper.c b/net/ceph/crush/mapper.c
index 3a5bd1cd1e99..17b041779fb9 100644
--- a/net/ceph/crush/mapper.c
+++ b/net/ceph/crush/mapper.c
@@ -911,7 +911,7 @@ int crush_do_rule(const struct crush_map *map,
int osize;
const struct crush_rule *rule;
__u32 step;
- int i, j;
+ int i;
int numrep;
int out_size;
/*
@@ -1012,7 +1012,6 @@ int crush_do_rule(const struct crush_map *map,
if (numrep <= 0)
continue;
}
- j = 0;
/* make sure bucket id is valid */
bno = -1 - w[i];
if (bno < 0 || bno >= map->max_buckets) {
@@ -1036,7 +1035,7 @@ int crush_do_rule(const struct crush_map *map,
weight, weight_max,
x, numrep,
curstep->arg2,
- o+osize, j,
+ o+osize, 0,
result_max-osize,
choose_tries,
recurse_tries,
@@ -1058,7 +1057,7 @@ int crush_do_rule(const struct crush_map *map,
weight, weight_max,
x, out_size, numrep,
curstep->arg2,
- o+osize, j,
+ o+osize, 0,
choose_tries,
choose_leaf_tries ?
choose_leaf_tries : 1,
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index 108adb583744..34b3097b4c7b 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -368,8 +368,8 @@ static void ceph_sock_write_space(struct sock *sk)
/* only queue to workqueue if there is data we want to write,
* and there is sufficient space in the socket buffer to accept
* more data. clear SOCK_NOSPACE so that ceph_sock_write_space()
- * doesn't get called again until try_write() fills the socket
- * buffer. See net/ipv4/tcp_input.c:tcp_check_space()
+ * doesn't get called again until ceph_con_v[12]_try_write() fills
+ * the socket buffer. See net/ipv4/tcp_input.c:tcp_check_space()
* and net/core/stream.c:sk_stream_write_space().
*/
if (ceph_con_flag_test(con, CEPH_CON_F_WRITE_PENDING)) {
diff --git a/net/ceph/messenger_v2.c b/net/ceph/messenger_v2.c
index 50f65820f623..05f6eea299fc 100644
--- a/net/ceph/messenger_v2.c
+++ b/net/ceph/messenger_v2.c
@@ -8,7 +8,6 @@
#include <linux/ceph/ceph_debug.h>
#include <crypto/aead.h>
-#include <crypto/hash.h>
#include <crypto/sha2.h>
#include <crypto/utils.h>
#include <linux/bvec.h>
@@ -2352,16 +2351,14 @@ bad:
}
/*
- * Align session_key and con_secret to avoid GFP_ATOMIC allocation
- * inside crypto_shash_setkey() and crypto_aead_setkey() called from
- * setup_crypto(). __aligned(16) isn't guaranteed to work for stack
- * objects, so do it by hand.
+ * Align con_secret to avoid GFP_ATOMIC allocation inside
+ * crypto_aead_setkey() called from setup_crypto(). __aligned(16)
+ * isn't guaranteed to work for stack objects, so do it by hand.
*/
static int process_auth_done(struct ceph_connection *con, void *p, void *end)
{
- u8 session_key_buf[CEPH_MAX_KEY_LEN + 16];
+ u8 session_key[CEPH_MAX_KEY_LEN];
u8 con_secret_buf[CEPH_MAX_CON_SECRET_LEN + 16];
- u8 *session_key = PTR_ALIGN(&session_key_buf[0], 16);
u8 *con_secret = PTR_ALIGN(&con_secret_buf[0], 16);
int session_key_len, con_secret_len;
int payload_len;
@@ -2415,7 +2412,7 @@ static int process_auth_done(struct ceph_connection *con, void *p, void *end)
con->state = CEPH_CON_S_V2_AUTH_SIGNATURE;
out:
- memzero_explicit(session_key_buf, sizeof(session_key_buf));
+ memzero_explicit(session_key, sizeof(session_key));
memzero_explicit(con_secret_buf, sizeof(con_secret_buf));
return ret;
diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c
index d5080530ce0c..d2cdc8ee3155 100644
--- a/net/ceph/mon_client.c
+++ b/net/ceph/mon_client.c
@@ -174,6 +174,8 @@ int ceph_monmap_contains(struct ceph_monmap *m, struct ceph_entity_addr *addr)
*/
static void __send_prepared_auth_request(struct ceph_mon_client *monc, int len)
{
+ BUG_ON(len > monc->m_auth->front_alloc_len);
+
monc->pending_auth = 1;
monc->m_auth->front.iov_len = len;
monc->m_auth->hdr.front_len = cpu_to_le32(len);