mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 11:06:03 +02:00
ksmbd: do not advertise unimplemented CA support
ksmbd durable handles are currently in-memory state. There is no persistent open recovery, cluster ownership epoch, fencing, or failover implementation behind the continuous-availability share flag. Do not advertise SMB2 persistent-handle or continuous-availability capabilities until those guarantees exist. A client requesting DH2Q then falls back to the existing durable V2 behavior rather than being promised a persistent handle that cannot survive a server failure. Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
parent
d6bf101da7
commit
eebdd3f115
|
|
@ -270,8 +270,10 @@ void init_smb3_02_server(struct ksmbd_conn *conn)
|
|||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL)
|
||||
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_MULTI_CHANNEL;
|
||||
|
||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE)
|
||||
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_PERSISTENT_HANDLES;
|
||||
/*
|
||||
* Durable handles are in-memory only. Do not advertise persistent
|
||||
* handles until CA recovery and fencing are implemented.
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -294,8 +296,7 @@ int init_smb3_11_server(struct ksmbd_conn *conn)
|
|||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL)
|
||||
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_MULTI_CHANNEL;
|
||||
|
||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE)
|
||||
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_PERSISTENT_HANDLES;
|
||||
/* See init_smb3_02_server(): persistent handles require CA recovery. */
|
||||
|
||||
INIT_LIST_HEAD(&conn->preauth_sess_table);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -2556,12 +2556,11 @@ int smb2_tree_connect(struct ksmbd_work *work)
|
|||
up_write(&sess->tree_conns_lock);
|
||||
rsp->StructureSize = cpu_to_le16(16);
|
||||
out_err1:
|
||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE && share &&
|
||||
test_share_config_flag(share,
|
||||
KSMBD_SHARE_FLAG_CONTINUOUS_AVAILABILITY))
|
||||
rsp->Capabilities = SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY;
|
||||
else
|
||||
rsp->Capabilities = 0;
|
||||
/*
|
||||
* A configured CA share is not continuously available until persistent
|
||||
* open recovery, ownership fencing, and failover are implemented.
|
||||
*/
|
||||
rsp->Capabilities = 0;
|
||||
rsp->Reserved = 0;
|
||||
/* default manual caching */
|
||||
rsp->ShareFlags = SMB2_SHAREFLAG_MANUAL_CACHING;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user