Skip to content

Commit b6f6a7a

Browse files
author
Steve French
committed
smb3: add dynamic trace point for session setup key expired failures
There are cases where services need to remount (or change their credentials files) when keys have expired, but it can be helpful to have a dynamic trace point to make it easier to notify the service to refresh the storage account key. Here is sample output, one from mount with bad password, one from a reconnect where the password has been changed or expired and reconnect fails (requiring remount with new storage account key) TASK-PID CPU# ||||| TIMESTAMP FUNCTION | | | ||||| | | mount.cifs-11362 [000] ..... 6000.241620: smb3_key_expired: rc=-13 user=testpassu conn_id=0x2 server=localhost addr=127.0.0.1:445 kworker/4:0-8458 [004] ..... 6044.892283: smb3_key_expired: rc=-13 user=testpassu conn_id=0x3 server=localhost addr=127.0.0.1:445 Reviewed-by: Shyam Prasad N <sprasad@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 6629f87 commit b6f6a7a

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

fs/smb/client/smb2pdu.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1562,8 +1562,14 @@ SMB2_sess_sendreceive(struct SMB2_sess_data *sess_data)
15621562
cifs_small_buf_release(sess_data->iov[0].iov_base);
15631563
if (rc == 0)
15641564
sess_data->ses->expired_pwd = false;
1565-
else if ((rc == -EACCES) || (rc == -EKEYEXPIRED) || (rc == -EKEYREVOKED))
1565+
else if ((rc == -EACCES) || (rc == -EKEYEXPIRED) || (rc == -EKEYREVOKED)) {
1566+
if (sess_data->ses->expired_pwd == false)
1567+
trace_smb3_key_expired(sess_data->server->hostname,
1568+
sess_data->ses->user_name,
1569+
sess_data->server->conn_id,
1570+
&sess_data->server->dstaddr, rc);
15661571
sess_data->ses->expired_pwd = true;
1572+
}
15671573

15681574
memcpy(&sess_data->iov[0], &rsp_iov, sizeof(struct kvec));
15691575

fs/smb/client/trace.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,6 +1281,46 @@ DEFINE_EVENT(smb3_connect_err_class, smb3_##name, \
12811281

12821282
DEFINE_SMB3_CONNECT_ERR_EVENT(connect_err);
12831283

1284+
DECLARE_EVENT_CLASS(smb3_sess_setup_err_class,
1285+
TP_PROTO(char *hostname, char *username, __u64 conn_id,
1286+
const struct __kernel_sockaddr_storage *dst_addr, int rc),
1287+
TP_ARGS(hostname, username, conn_id, dst_addr, rc),
1288+
TP_STRUCT__entry(
1289+
__string(hostname, hostname)
1290+
__string(username, username)
1291+
__field(__u64, conn_id)
1292+
__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1293+
__field(int, rc)
1294+
),
1295+
TP_fast_assign(
1296+
struct sockaddr_storage *pss = NULL;
1297+
1298+
__entry->conn_id = conn_id;
1299+
__entry->rc = rc;
1300+
pss = (struct sockaddr_storage *)__entry->dst_addr;
1301+
*pss = *dst_addr;
1302+
__assign_str(hostname);
1303+
__assign_str(username);
1304+
),
1305+
TP_printk("rc=%d user=%s conn_id=0x%llx server=%s addr=%pISpsfc",
1306+
__entry->rc,
1307+
__get_str(username),
1308+
__entry->conn_id,
1309+
__get_str(hostname),
1310+
__entry->dst_addr)
1311+
)
1312+
1313+
#define DEFINE_SMB3_SES_SETUP_ERR_EVENT(name) \
1314+
DEFINE_EVENT(smb3_sess_setup_err_class, smb3_##name, \
1315+
TP_PROTO(char *hostname, \
1316+
char *username, \
1317+
__u64 conn_id, \
1318+
const struct __kernel_sockaddr_storage *addr, \
1319+
int rc), \
1320+
TP_ARGS(hostname, username, conn_id, addr, rc))
1321+
1322+
DEFINE_SMB3_SES_SETUP_ERR_EVENT(key_expired);
1323+
12841324
DECLARE_EVENT_CLASS(smb3_reconnect_class,
12851325
TP_PROTO(__u64 currmid,
12861326
__u64 conn_id,

0 commit comments

Comments
 (0)