Pointer values can be reused (yes, I hit that during my testing!).
Introduce a channel_id to identify connections and also add
some timestamps to make debugging easier.
This makes smbXsrv_session_find_auth() much more robust.
This is a similar change as
0cec96526bf4d3209caf36c4a19632ff5d5dd112:
"smb2_server: make sure we detect stale smbXsrv_connection pointers in smbXsrv_channel_global"
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11898
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Günther Deschner <gd@samba.org>
uint8 in_security_mode;
NTTIME creation_time;
NTTIME idle_time;
+ hyper channel_id;
} smbXsrv_session_auth0;
typedef struct {
struct smbXsrv_session_auth0 *a;
for (a = session->pending_auth; a != NULL; a = a->next) {
+ if (a->channel_id != conn->channel_id) {
+ continue;
+ }
+
if (a->connection == conn) {
if (now != 0) {
a->idle_time = now;
a->in_security_mode = in_security_mode;
a->creation_time = now;
a->idle_time = now;
+ a->channel_id = conn->channel_id;
if (conn->protocol >= PROTOCOL_SMB3_10) {
a->preauth = talloc(a, struct smbXsrv_preauth);