- From 09f9cb7d2bb52fe20950c41497776a0f220ceac9 Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Mon, 6 May 2024 10:34:42 +0200
- Subject: [PATCH 1/8] daemon:
- |get_token_user_name()|+|get_token_primarygroup_name()| are too noisy
- |get_token_user_name()| and |get_token_primarygroup_name()| are too
- noisy in debug level >= 2.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- daemon/util.c | 4 ----
- 1 file changed, 4 deletions(-)
- diff --git a/daemon/util.c b/daemon/util.c
- index b0f7608..9915b06 100644
- --- a/daemon/util.c
- +++ b/daemon/util.c
- @@ -757,7 +757,6 @@ bool get_token_user_name(HANDLE tok, char *out_buffer)
- #ifdef NFS41_DRIVER_SID_CACHE
- if (sidcache_getcached_bysid(&user_sidcache, pusid, out_buffer)) {
- - DPRINTF(2, ("get_token_user_name: cached '%s'\n", out_buffer));
- return true;
- }
- #endif /* NFS41_DRIVER_SID_CACHE */
- @@ -771,7 +770,6 @@ bool get_token_user_name(HANDLE tok, char *out_buffer)
- }
- #ifdef NFS41_DRIVER_SID_CACHE
- - DPRINTF(2, ("get_token_user_name: NOT cached '%s'\n", out_buffer));
- sidcache_add(&user_sidcache, out_buffer, pusid);
- #endif /* NFS41_DRIVER_SID_CACHE */
- @@ -803,7 +801,6 @@ bool get_token_primarygroup_name(HANDLE tok, char *out_buffer)
- #ifdef NFS41_DRIVER_SID_CACHE
- if (sidcache_getcached_bysid(&group_sidcache, pgsid, out_buffer)) {
- - DPRINTF(2, ("get_token_primarygroup_name: cached '%s'\n", out_buffer));
- return true;
- }
- #endif /* NFS41_DRIVER_SID_CACHE */
- @@ -817,7 +814,6 @@ bool get_token_primarygroup_name(HANDLE tok, char *out_buffer)
- }
- #ifdef NFS41_DRIVER_SID_CACHE
- - DPRINTF(2, ("get_token_primarygroup_name: NOT cached '%s'\n", out_buffer));
- sidcache_add(&group_sidcache, out_buffer, pgsid);
- #endif /* NFS41_DRIVER_SID_CACHE */
- --
- 2.43.0
- From c170ced8da4e1436d5cb6a50cbb3cdae3de177b5 Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Mon, 6 May 2024 10:37:13 +0200
- Subject: [PATCH 2/8] daemon: Implement |nfs41_idmap_name_to_uid()|
- Implement |nfs41_idmap_name_to_uid()| as alternative to
- |nfs41_idmap_name_to_ids()| because we now support non-default
- primary groups in tokens (for newgrp(1)/|setgid()| support),
- so always getting the default gid for an user (with
- |nfs41_idmap_name_to_ids()|) is useless.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- daemon/idmap.c | 30 ++++++++++++++++++++++++++++++
- daemon/idmap.h | 4 ++++
- daemon/nfs41_daemon.c | 18 ++++++++++--------
- daemon/open.c | 6 ++----
- daemon/sid.c | 11 +++++------
- 5 files changed, 51 insertions(+), 18 deletions(-)
- diff --git a/daemon/idmap.c b/daemon/idmap.c
- index 77e2d3c..fa4ca95 100644
- --- a/daemon/idmap.c
- +++ b/daemon/idmap.c
- @@ -1004,6 +1004,36 @@ static int username_cmp(const struct list_entry *list, const void *value)
- return strcmp(entry->username, username);
- }
- +
- +int nfs41_idmap_name_to_uid(
- + struct idmap_context *context,
- + const char *username,
- + uid_t *uid_out)
- +{
- + struct idmap_lookup lookup = { ATTR_USER_NAME,
- + CLASS_USER, TYPE_STR, username_cmp };
- + struct idmap_user user;
- + int status;
- +
- + DPRINTF(IDLVL, ("--> nfs41_idmap_name_to_uid('%s')\n", username));
- +
- + lookup.value = username;
- +
- + /* look up the user entry */
- + status = idmap_lookup_user(context, &lookup, &user);
- + if (status) {
- + DPRINTF(IDLVL, ("<-- nfs41_idmap_name_to_uid('%s') "
- + "failed with %d\n", username, status));
- + goto out;
- + }
- +
- + *uid_out = user.uid;
- + DPRINTF(IDLVL, ("<-- nfs41_idmap_name_to_uid('%s') "
- + "returning uid=%u\n", username, user.uid));
- +out:
- + return status;
- +}
- +
- int nfs41_idmap_name_to_ids(
- struct idmap_context *context,
- const char *username,
- diff --git a/daemon/idmap.h b/daemon/idmap.h
- index 8ab7133..3660ad5 100644
- --- a/daemon/idmap.h
- +++ b/daemon/idmap.h
- @@ -36,6 +36,10 @@ void nfs41_idmap_free(
- nfs41_idmapper *context);
- +int nfs41_idmap_name_to_uid(
- + struct idmap_context *context,
- + const char *username,
- + uid_t *uid_out);
- int nfs41_idmap_name_to_ids(
- nfs41_idmapper *context,
- const char *username,
- diff --git a/daemon/nfs41_daemon.c b/daemon/nfs41_daemon.c
- index bca8f0a..207fbdc 100644
- --- a/daemon/nfs41_daemon.c
- +++ b/daemon/nfs41_daemon.c
- @@ -73,33 +73,30 @@ static int map_current_user_to_ids(nfs41_idmapper *idmapper, uid_t *puid, gid_t
- char pgroupname[GNLEN+1];
- int status = NO_ERROR;
- HANDLE impersonation_tok = GetCurrentThreadEffectiveToken();
- - gid_t dummygid;
- if (!get_token_user_name(impersonation_tok, username)) {
- status = GetLastError();
- eprintf("map_current_user_to_ids: "
- "get_token_user_name() failed with %d\n", status);
- - goto out;
- + goto out_map_default_ids;
- }
- if (!get_token_primarygroup_name(impersonation_tok, pgroupname)) {
- status = GetLastError();
- eprintf("map_current_user_to_ids: "
- "get_token_primarygroup_name() failed with %d\n", status);
- - goto out;
- + goto out_map_default_ids;
- }
- - if (nfs41_idmap_name_to_ids(idmapper, username, puid, &dummygid)) {
- + if (nfs41_idmap_name_to_uid(idmapper, username, puid)) {
- /* instead of failing for auth_sys, fall back to 'nobody' uid/gid */
- DPRINTF(1,
- ("map_current_user_to_ids: "
- - "nfs41_idmap_name_to_ids(username='%s') failed, "
- + "nfs41_idmap_name_to_uid(username='%s') failed, "
- "returning nobody/nogroup defaults\n",
- username));
- - *puid = nfs41_dg.default_uid;
- - *pgid = nfs41_dg.default_gid;
- status = NO_ERROR;
- - goto out;
- + goto out_map_default_ids;
- }
- if (nfs41_idmap_group_to_gid(
- @@ -121,6 +118,11 @@ out:
- username, (int)*puid,
- pgroupname, (int)*pgid));
- return status;
- +
- +out_map_default_ids:
- + *puid = nfs41_dg.default_uid;
- + *pgid = nfs41_dg.default_gid;
- + goto out;
- }
- static unsigned int nfsd_worker_thread_main(void *args)
- diff --git a/daemon/open.c b/daemon/open.c
- index fd30229..57dd53f 100644
- --- a/daemon/open.c
- +++ b/daemon/open.c
- @@ -776,7 +776,6 @@ static int handle_open(void *daemon_context, nfs41_upcall *upcall)
- #ifdef NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES
- char owner[NFS4_OPAQUE_LIMIT], owner_group[NFS4_OPAQUE_LIMIT];
- uid_t map_uid = -1;
- - gid_t gid_dummy = -1;
- gid_t map_gid = -1;
- char *at_ch; /* pointer to '@' */
- @@ -835,11 +834,10 @@ static int handle_open(void *daemon_context, nfs41_upcall *upcall)
- if (at_ch = strchr(owner, '@'))
- *at_ch = '\0';
- - if (nfs41_idmap_name_to_ids(
- + if (nfs41_idmap_name_to_uid(
- nfs41dg->idmapper,
- owner,
- - &map_uid,
- - &gid_dummy) == 0) {
- + &map_uid) == 0) {
- args->owner_local_uid = map_uid;
- }
- else {
- diff --git a/daemon/sid.c b/daemon/sid.c
- index ea75bba..20db96b 100644
- --- a/daemon/sid.c
- +++ b/daemon/sid.c
- @@ -476,15 +476,14 @@ int map_nfs4servername_2_sid(nfs41_daemon_globals *nfs41dg, int query, DWORD *si
- uid_t map_uid = -1;
- gid_t gid_dummy = -1;
- - if (nfs41_idmap_name_to_ids(
- - nfs41dg->idmapper,
- - nfsname,
- - &map_uid,
- - &gid_dummy) == 0) {
- + if (nfs41_idmap_name_to_uid(nfs41dg->idmapper,
- + nfsname, &map_uid) == 0) {
- user_uid = map_uid;
- }
- else {
- - DPRINTF(1, ("map_nfs4servername_2_sid(query=%x,name='%s'): nfs41_idmap_name_to_ids() failed\n",
- + DPRINTF(1,
- + ("map_nfs4servername_2_sid(query=%x,name='%s'): "
- + "nfs41_idmap_name_to_uid() failed\n",
- query, nfsname));
- /* fixme: try harder here, "1234" should to to |atol()| */
- }
- --
- 2.43.0
- From 26f1232eaaa669b04d505a7cb78b8dfbefe75211 Mon Sep 17 00:00:00 2001
- From: Dan Shelton <dan.f.shelton@gmail.com>
- Date: Mon, 6 May 2024 12:20:13 +0200
- Subject: [PATCH 3/8] mount: swprintf() counts in WCHAR_T, not char
- swprintf() counts in WCHAR_T, not char, so pass the correct buffer
- size.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- mount/mount.c | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
- diff --git a/mount/mount.c b/mount/mount.c
- index d480d05..3c07cd5 100644
- --- a/mount/mount.c
- +++ b/mount/mount.c
- @@ -347,7 +347,9 @@ static DWORD ParseRemoteName(
- PFILE_FULL_EA_INFORMATION port_option_val;
- wchar_t remotename[NFS41_SYS_MAX_PATH_LEN];
- wchar_t *premotename = remotename;
- - wchar_t srvname[NFS41_SYS_MAX_PATH_LEN+1+32]; /* sizeof(hostname+'@'+integer) */
- +/* sizeof(hostname+'@'+integer) */
- +#define SRVNAME_LEN (NFS41_SYS_MAX_PATH_LEN+1+32)
- + wchar_t srvname[SRVNAME_LEN];
- url_parser_context *uctx = NULL;
- result = StringCchCopy(premotename, NFS41_SYS_MAX_PATH_LEN, pRemoteName);
- @@ -534,12 +536,12 @@ static DWORD ParseRemoteName(
- * 2. ALWAYS add port number to hostname, so UNC paths use it
- * too
- */
- - (void)swprintf(srvname, sizeof(srvname),
- + (void)swprintf(srvname, SRVNAME_LEN,
- TEXT("%s.ipv6-literal.net@%d"), premotename, port);
- }
- else {
- /* ALWAYS add port number to hostname, so UNC paths use it too */
- - (void)swprintf(srvname, sizeof(srvname), TEXT("%s@%d"),
- + (void)swprintf(srvname, SRVNAME_LEN, TEXT("%s@%d"),
- premotename, port);
- }
- --
- 2.43.0
- From eaab8f311dfc2b5dd5ff636fcdbffe57436443da Mon Sep 17 00:00:00 2001
- From: Dan Shelton <dan.f.shelton@gmail.com>
- Date: Mon, 6 May 2024 12:22:00 +0200
- Subject: [PATCH 4/8] mount: Fix minimum buffer size in PrintMountLine()
- Fix minimum buffer size in PrintMountLine()
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- mount/enum.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
- diff --git a/mount/enum.c b/mount/enum.c
- index 7f43cda..8ee59d1 100644
- --- a/mount/enum.c
- +++ b/mount/enum.c
- @@ -38,7 +38,7 @@ void PrintMountLine(
- LPCTSTR remote)
- {
- TCHAR *cygwin_unc_buffer = alloca((_tcslen(remote)+32)*sizeof(TCHAR));
- - char *cygwin_nfsurl_buffer = alloca(((_tcslen(remote)+32)*3));
- + char *cygwin_nfsurl_buffer = alloca(((_tcslen(remote)+32)*3)+8);
- TCHAR *b;
- LPCTSTR s;
- TCHAR sc;
- --
- 2.43.0
- From a7c09e8da14bdc0a467b32367c64b79d34a18824 Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Mon, 6 May 2024 13:20:18 +0200
- Subject: [PATCH 5/8] sys: Rename s/DEBUG_MISC/DEBUG_FSCTL/ and enable
- DEBUG_FSCTL
- Rename |DEBUG_MISC| to |DEBUG_FSCTL| and enable |DEBUG_FSCTL| by default.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- sys/nfs41_driver.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
- diff --git a/sys/nfs41_driver.c b/sys/nfs41_driver.c
- index cb563de..412e2d7 100644
- --- a/sys/nfs41_driver.c
- +++ b/sys/nfs41_driver.c
- @@ -69,7 +69,7 @@
- //#define DEBUG_EA_QUERY
- //#define DEBUG_EA_SET
- //#define DEBUG_LOCK
- -//#define DEBUG_MISC
- +#define DEBUG_FSCTL
- #define DEBUG_TIME_BASED_COHERENCY
- //#define DEBUG_MOUNT
- //#define DEBUG_VOLUME_QUERY
- @@ -6886,7 +6886,7 @@ NTSTATUS nfs41_FsCtl(
- IN OUT PRX_CONTEXT RxContext)
- {
- NTSTATUS status = STATUS_INVALID_DEVICE_REQUEST;
- -#ifdef DEBUG_MISC
- +#ifdef DEBUG_FSCTL
- DbgEn();
- print_debug_header(RxContext);
- #endif
- @@ -6898,13 +6898,13 @@ NTSTATUS nfs41_FsCtl(
- case FSCTL_GET_REPARSE_POINT:
- status = nfs41_GetReparsePoint(RxContext);
- break;
- -#ifdef DEBUG_MISC
- +#ifdef DEBUG_FSCTL
- default:
- - DbgP("FsControlCode: %d\n",
- - RxContext->LowIoContext.ParamsFor.FsCtl.FsControlCode);
- + DbgP("nfs41_FsCtl: FsControlCode: %d\n",
- + (int)RxContext->LowIoContext.ParamsFor.FsCtl.FsControlCode);
- #endif
- }
- -#ifdef DEBUG_MISC
- +#ifdef DEBUG_FSCTL
- DbgEx();
- #endif
- return status;
- --
- 2.43.0
- From 6e79afa46b29ded3cd718f797d87ff60ba24f608 Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Mon, 6 May 2024 14:42:03 +0200
- Subject: [PATCH 6/8] sys: Provide better debugging messages for |FSCTL_*|
- Provide better debugging messages for |FSCTL_*|
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- sys/nfs41_debug.c | 223 +++++++++++++++++++++++++++++++++++++++++++++
- sys/nfs41_debug.h | 1 +
- sys/nfs41_driver.c | 25 +++--
- 3 files changed, 243 insertions(+), 6 deletions(-)
- diff --git a/sys/nfs41_debug.c b/sys/nfs41_debug.c
- index 6fbdc22..2a3a7dc 100644
- --- a/sys/nfs41_debug.c
- +++ b/sys/nfs41_debug.c
- @@ -738,3 +738,226 @@ dprintk(
- return rv;
- }
- +const char *fsctl2string(ULONG fscontrolcode)
- +{
- +#define CASE_SYM2STR_RET(x) case (x): return #x ; break;
- + switch(fscontrolcode) {
- + CASE_SYM2STR_RET(FSCTL_ADD_OVERLAY)
- + CASE_SYM2STR_RET(FSCTL_ADVANCE_FILE_ID)
- + CASE_SYM2STR_RET(FSCTL_ALLOW_EXTENDED_DASD_IO)
- + CASE_SYM2STR_RET(FSCTL_CLEAN_VOLUME_METADATA)
- + CASE_SYM2STR_RET(FSCTL_CORRUPTION_HANDLING)
- + CASE_SYM2STR_RET(FSCTL_CREATE_OR_GET_OBJECT_ID)
- + CASE_SYM2STR_RET(FSCTL_CREATE_USN_JOURNAL)
- + CASE_SYM2STR_RET(FSCTL_CSC_INTERNAL)
- + CASE_SYM2STR_RET(FSCTL_CSV_CONTROL)
- + CASE_SYM2STR_RET(FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT)
- + CASE_SYM2STR_RET(FSCTL_CSV_GET_VOLUME_PATH_NAME)
- + CASE_SYM2STR_RET(FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME)
- + CASE_SYM2STR_RET(FSCTL_CSV_H_BREAKING_SYNC_TUNNEL_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_CSV_INTERNAL)
- + CASE_SYM2STR_RET(FSCTL_CSV_MGMT_LOCK)
- + CASE_SYM2STR_RET(FSCTL_CSV_QUERY_DOWN_LEVEL_FILE_SYSTEM_CHARACTERISTICS)
- + CASE_SYM2STR_RET(FSCTL_CSV_QUERY_VETO_FILE_DIRECT_IO)
- + CASE_SYM2STR_RET(FSCTL_CSV_SYNC_TUNNEL_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_CSV_TUNNEL_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_DELETE_CORRUPTED_REFS_CONTAINER)
- + CASE_SYM2STR_RET(FSCTL_DELETE_EXTERNAL_BACKING)
- + CASE_SYM2STR_RET(FSCTL_DELETE_OBJECT_ID)
- + CASE_SYM2STR_RET(FSCTL_DELETE_REPARSE_POINT)
- + CASE_SYM2STR_RET(FSCTL_DELETE_USN_JOURNAL)
- + CASE_SYM2STR_RET(FSCTL_DFSR_SET_GHOST_HANDLE_STATE)
- + CASE_SYM2STR_RET(FSCTL_DISABLE_LOCAL_BUFFERING)
- + CASE_SYM2STR_RET(FSCTL_DISMOUNT_VOLUME)
- + CASE_SYM2STR_RET(FSCTL_DUPLICATE_EXTENTS_TO_FILE)
- + CASE_SYM2STR_RET(FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX)
- + CASE_SYM2STR_RET(FSCTL_ENABLE_PER_IO_FLAGS)
- + CASE_SYM2STR_RET(FSCTL_ENABLE_UPGRADE)
- + CASE_SYM2STR_RET(FSCTL_ENCRYPTION_FSCTL_IO)
- + CASE_SYM2STR_RET(FSCTL_ENCRYPTION_KEY_CONTROL)
- + CASE_SYM2STR_RET(FSCTL_ENUM_EXTERNAL_BACKING)
- + CASE_SYM2STR_RET(FSCTL_ENUM_OVERLAY)
- + CASE_SYM2STR_RET(FSCTL_ENUM_USN_DATA)
- + CASE_SYM2STR_RET(FSCTL_EXTEND_VOLUME)
- + CASE_SYM2STR_RET(FSCTL_FILESYSTEM_GET_STATISTICS)
- + CASE_SYM2STR_RET(FSCTL_FILESYSTEM_GET_STATISTICS_EX)
- + CASE_SYM2STR_RET(FSCTL_FILE_LEVEL_TRIM)
- + CASE_SYM2STR_RET(FSCTL_FILE_PREFETCH)
- + CASE_SYM2STR_RET(FSCTL_FILE_TYPE_NOTIFICATION)
- + CASE_SYM2STR_RET(FSCTL_FIND_FILES_BY_SID)
- + CASE_SYM2STR_RET(FSCTL_GET_BOOT_AREA_INFO)
- + CASE_SYM2STR_RET(FSCTL_GET_COMPRESSION)
- + CASE_SYM2STR_RET(FSCTL_GET_EXTERNAL_BACKING)
- + CASE_SYM2STR_RET(FSCTL_GET_INTEGRITY_INFORMATION)
- + CASE_SYM2STR_RET(FSCTL_GET_NTFS_FILE_RECORD)
- + CASE_SYM2STR_RET(FSCTL_GET_NTFS_VOLUME_DATA)
- + CASE_SYM2STR_RET(FSCTL_GET_OBJECT_ID)
- + CASE_SYM2STR_RET(FSCTL_GET_REFS_VOLUME_DATA)
- + CASE_SYM2STR_RET(FSCTL_GET_REPAIR)
- + CASE_SYM2STR_RET(FSCTL_GET_REPARSE_POINT)
- + CASE_SYM2STR_RET(FSCTL_GET_RETRIEVAL_POINTERS)
- + CASE_SYM2STR_RET(FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT)
- + CASE_SYM2STR_RET(FSCTL_GET_RETRIEVAL_POINTER_BASE)
- + CASE_SYM2STR_RET(FSCTL_GET_RETRIEVAL_POINTER_COUNT)
- + CASE_SYM2STR_RET(FSCTL_GET_VOLUME_BITMAP)
- + CASE_SYM2STR_RET(FSCTL_GET_WOF_VERSION)
- + CASE_SYM2STR_RET(FSCTL_GHOST_FILE_EXTENTS)
- + CASE_SYM2STR_RET(FSCTL_HCS_ASYNC_TUNNEL_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_HCS_SYNC_NO_WRITE_TUNNEL_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_HCS_SYNC_TUNNEL_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_INITIATE_FILE_METADATA_OPTIMIZATION)
- + CASE_SYM2STR_RET(FSCTL_INITIATE_REPAIR)
- + CASE_SYM2STR_RET(FSCTL_INTEGRITY_FLAG_CHECKSUM_ENFORCEMENT_OFF)
- + CASE_SYM2STR_RET(FSCTL_INVALIDATE_VOLUMES)
- + CASE_SYM2STR_RET(FSCTL_IS_CSV_FILE)
- + CASE_SYM2STR_RET(FSCTL_IS_FILE_ON_CSV_VOLUME)
- + CASE_SYM2STR_RET(FSCTL_IS_PATHNAME_VALID)
- + CASE_SYM2STR_RET(FSCTL_IS_VOLUME_DIRTY)
- + CASE_SYM2STR_RET(FSCTL_IS_VOLUME_MOUNTED)
- + CASE_SYM2STR_RET(FSCTL_IS_VOLUME_OWNED_BYCSVFS)
- + CASE_SYM2STR_RET(FSCTL_LOCK_VOLUME)
- + CASE_SYM2STR_RET(FSCTL_LOOKUP_STREAM_FROM_CLUSTER)
- + CASE_SYM2STR_RET(FSCTL_MAKE_MEDIA_COMPATIBLE)
- + CASE_SYM2STR_RET(FSCTL_MARK_AS_SYSTEM_HIVE)
- + CASE_SYM2STR_RET(FSCTL_MARK_HANDLE)
- + CASE_SYM2STR_RET(FSCTL_MARK_VOLUME_DIRTY)
- + CASE_SYM2STR_RET(FSCTL_MOVE_FILE)
- + CASE_SYM2STR_RET(FSCTL_NOTIFY_DATA_CHANGE)
- + CASE_SYM2STR_RET(FSCTL_NOTIFY_STORAGE_SPACE_ALLOCATION)
- + CASE_SYM2STR_RET(FSCTL_OFFLOAD_READ)
- + CASE_SYM2STR_RET(FSCTL_OFFLOAD_WRITE)
- + CASE_SYM2STR_RET(FSCTL_OPBATCH_ACK_CLOSE_PENDING)
- + CASE_SYM2STR_RET(FSCTL_OPLOCK_BREAK_ACKNOWLEDGE)
- + CASE_SYM2STR_RET(FSCTL_OPLOCK_BREAK_ACK_NO_2)
- + CASE_SYM2STR_RET(FSCTL_OPLOCK_BREAK_NOTIFY)
- + CASE_SYM2STR_RET(FSCTL_QUERY_ALLOCATED_RANGES)
- +#ifdef FSCTL_QUERY_ASYNC_DUPLICATE_EXTENTS_STATUS
- + CASE_SYM2STR_RET(FSCTL_QUERY_ASYNC_DUPLICATE_EXTENTS_STATUS)
- +#endif
- + CASE_SYM2STR_RET(FSCTL_QUERY_BAD_RANGES)
- + CASE_SYM2STR_RET(FSCTL_QUERY_DEPENDENT_VOLUME)
- + CASE_SYM2STR_RET(FSCTL_QUERY_DIRECT_ACCESS_EXTENTS)
- + CASE_SYM2STR_RET(FSCTL_QUERY_DIRECT_IMAGE_ORIGINAL_BASE)
- + CASE_SYM2STR_RET(FSCTL_QUERY_EXTENT_READ_CACHE_INFO)
- + CASE_SYM2STR_RET(FSCTL_QUERY_FAT_BPB)
- + CASE_SYM2STR_RET(FSCTL_QUERY_FILE_LAYOUT)
- + CASE_SYM2STR_RET(FSCTL_QUERY_FILE_METADATA_OPTIMIZATION)
- + CASE_SYM2STR_RET(FSCTL_QUERY_FILE_REGIONS)
- + CASE_SYM2STR_RET(FSCTL_QUERY_FILE_SYSTEM_RECOGNITION)
- + CASE_SYM2STR_RET(FSCTL_QUERY_GHOSTED_FILE_EXTENTS)
- + CASE_SYM2STR_RET(FSCTL_QUERY_ON_DISK_VOLUME_INFO)
- + CASE_SYM2STR_RET(FSCTL_QUERY_PAGEFILE_ENCRYPTION)
- + CASE_SYM2STR_RET(FSCTL_QUERY_PERSISTENT_VOLUME_STATE)
- + CASE_SYM2STR_RET(FSCTL_QUERY_REFS_SMR_VOLUME_INFO)
- + CASE_SYM2STR_RET(FSCTL_QUERY_REFS_VOLUME_COUNTER_INFO)
- + CASE_SYM2STR_RET(FSCTL_QUERY_REGION_INFO)
- + CASE_SYM2STR_RET(FSCTL_QUERY_REGION_INFO_INPUT_VERSION)
- + CASE_SYM2STR_RET(FSCTL_QUERY_REGION_INFO_OUTPUT_VERSION)
- + CASE_SYM2STR_RET(FSCTL_QUERY_RETRIEVAL_POINTERS)
- + CASE_SYM2STR_RET(FSCTL_QUERY_SHARED_VIRTUAL_DISK_SUPPORT)
- + CASE_SYM2STR_RET(FSCTL_QUERY_SPARING_INFO)
- + CASE_SYM2STR_RET(FSCTL_QUERY_STORAGE_CLASSES)
- + CASE_SYM2STR_RET(FSCTL_QUERY_STORAGE_CLASSES_OUTPUT_VERSION)
- + CASE_SYM2STR_RET(FSCTL_QUERY_USN_JOURNAL)
- + CASE_SYM2STR_RET(FSCTL_QUERY_VOLUME_CONTAINER_STATE)
- + CASE_SYM2STR_RET(FSCTL_QUERY_VOLUME_NUMA_INFO)
- + CASE_SYM2STR_RET(FSCTL_READ_FILE_USN_DATA)
- + CASE_SYM2STR_RET(FSCTL_READ_FROM_PLEX)
- + CASE_SYM2STR_RET(FSCTL_READ_RAW_ENCRYPTED)
- + CASE_SYM2STR_RET(FSCTL_READ_UNPRIVILEGED_USN_JOURNAL)
- + CASE_SYM2STR_RET(FSCTL_READ_USN_JOURNAL)
- + CASE_SYM2STR_RET(FSCTL_REARRANGE_FILE)
- + CASE_SYM2STR_RET(FSCTL_RECALL_FILE)
- + CASE_SYM2STR_RET(FSCTL_REFS_DEALLOCATE_RANGES)
- +#ifdef FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT
- + CASE_SYM2STR_RET(FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT)
- +#endif
- + CASE_SYM2STR_RET(FSCTL_REMOVE_OVERLAY)
- + CASE_SYM2STR_RET(FSCTL_REPAIR_COPIES)
- + CASE_SYM2STR_RET(FSCTL_REQUEST_BATCH_OPLOCK)
- + CASE_SYM2STR_RET(FSCTL_REQUEST_FILTER_OPLOCK)
- + CASE_SYM2STR_RET(FSCTL_REQUEST_OPLOCK)
- + CASE_SYM2STR_RET(FSCTL_REQUEST_OPLOCK_LEVEL_1)
- + CASE_SYM2STR_RET(FSCTL_REQUEST_OPLOCK_LEVEL_2)
- + CASE_SYM2STR_RET(FSCTL_RESET_VOLUME_ALLOCATION_HINTS)
- + CASE_SYM2STR_RET(FSCTL_RKF_INTERNAL)
- + CASE_SYM2STR_RET(FSCTL_SCRUB_DATA)
- + CASE_SYM2STR_RET(FSCTL_SCRUB_UNDISCOVERABLE_ID)
- + CASE_SYM2STR_RET(FSCTL_SD_GLOBAL_CHANGE)
- + CASE_SYM2STR_RET(FSCTL_SECURITY_ID_CHECK)
- + CASE_SYM2STR_RET(FSCTL_SET_COMPRESSION)
- + CASE_SYM2STR_RET(FSCTL_SET_DAX_ALLOC_ALIGNMENT_HINT)
- + CASE_SYM2STR_RET(FSCTL_SET_DEFECT_MANAGEMENT)
- + CASE_SYM2STR_RET(FSCTL_SET_ENCRYPTION)
- + CASE_SYM2STR_RET(FSCTL_SET_EXTERNAL_BACKING)
- + CASE_SYM2STR_RET(FSCTL_SET_INTEGRITY_INFORMATION)
- + CASE_SYM2STR_RET(FSCTL_SET_INTEGRITY_INFORMATION_EX)
- + CASE_SYM2STR_RET(FSCTL_SET_LAYER_ROOT)
- + CASE_SYM2STR_RET(FSCTL_SET_OBJECT_ID)
- + CASE_SYM2STR_RET(FSCTL_SET_OBJECT_ID_EXTENDED)
- + CASE_SYM2STR_RET(FSCTL_SET_PERSISTENT_VOLUME_STATE)
- + CASE_SYM2STR_RET(FSCTL_SET_PURGE_FAILURE_MODE)
- + CASE_SYM2STR_RET(FSCTL_SET_REFS_FILE_STRICTLY_SEQUENTIAL)
- + CASE_SYM2STR_RET(FSCTL_SET_REFS_SMR_VOLUME_GC_PARAMETERS)
- + CASE_SYM2STR_RET(FSCTL_SET_REPAIR)
- + CASE_SYM2STR_RET(FSCTL_SET_REPARSE_POINT)
- + CASE_SYM2STR_RET(FSCTL_SET_REPARSE_POINT_EX)
- + CASE_SYM2STR_RET(FSCTL_SET_SHORT_NAME_BEHAVIOR)
- + CASE_SYM2STR_RET(FSCTL_SET_SPARSE)
- + CASE_SYM2STR_RET(FSCTL_SET_VOLUME_COMPRESSION_STATE)
- + CASE_SYM2STR_RET(FSCTL_SET_ZERO_DATA)
- + CASE_SYM2STR_RET(FSCTL_SET_ZERO_ON_DEALLOCATION)
- + CASE_SYM2STR_RET(FSCTL_SHRINK_VOLUME)
- + CASE_SYM2STR_RET(FSCTL_SHUFFLE_FILE)
- + CASE_SYM2STR_RET(FSCTL_SIS_COPYFILE)
- + CASE_SYM2STR_RET(FSCTL_SIS_LINK_FILES)
- +#ifdef FSCTL_SMB_SHARE_FLUSH_AND_PURGE
- + CASE_SYM2STR_RET(FSCTL_SMB_SHARE_FLUSH_AND_PURGE)
- +#endif
- + CASE_SYM2STR_RET(FSCTL_SPARSE_OVERALLOCATE)
- + CASE_SYM2STR_RET(FSCTL_SSDI_STORAGE_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_START_VIRTUALIZATION_INSTANCE_EX)
- + CASE_SYM2STR_RET(FSCTL_STORAGE_QOS_CONTROL)
- + CASE_SYM2STR_RET(FSCTL_STREAMS_ASSOCIATE_ID)
- + CASE_SYM2STR_RET(FSCTL_STREAMS_QUERY_ID)
- + CASE_SYM2STR_RET(FSCTL_STREAMS_QUERY_PARAMETERS)
- + CASE_SYM2STR_RET(FSCTL_SUSPEND_OVERLAY)
- + CASE_SYM2STR_RET(FSCTL_SVHDX_ASYNC_TUNNEL_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_SVHDX_SET_INITIATOR_INFORMATION)
- + CASE_SYM2STR_RET(FSCTL_SVHDX_SYNC_TUNNEL_REQUEST)
- + CASE_SYM2STR_RET(FSCTL_TXFS_CREATE_MINIVERSION)
- + CASE_SYM2STR_RET(FSCTL_TXFS_CREATE_SECONDARY_RM)
- + CASE_SYM2STR_RET(FSCTL_TXFS_GET_METADATA_INFO)
- + CASE_SYM2STR_RET(FSCTL_TXFS_GET_TRANSACTED_VERSION)
- + CASE_SYM2STR_RET(FSCTL_TXFS_LIST_TRANSACTIONS)
- + CASE_SYM2STR_RET(FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES)
- + CASE_SYM2STR_RET(FSCTL_TXFS_MODIFY_RM)
- + CASE_SYM2STR_RET(FSCTL_TXFS_QUERY_RM_INFORMATION)
- + CASE_SYM2STR_RET(FSCTL_TXFS_READ_BACKUP_INFORMATION)
- + CASE_SYM2STR_RET(FSCTL_TXFS_READ_BACKUP_INFORMATION2)
- + CASE_SYM2STR_RET(FSCTL_TXFS_ROLLFORWARD_REDO)
- + CASE_SYM2STR_RET(FSCTL_TXFS_ROLLFORWARD_UNDO)
- + CASE_SYM2STR_RET(FSCTL_TXFS_SAVEPOINT_INFORMATION)
- + CASE_SYM2STR_RET(FSCTL_TXFS_SHUTDOWN_RM)
- + CASE_SYM2STR_RET(FSCTL_TXFS_START_RM)
- + CASE_SYM2STR_RET(FSCTL_TXFS_TRANSACTION_ACTIVE)
- + CASE_SYM2STR_RET(FSCTL_TXFS_WRITE_BACKUP_INFORMATION)
- + CASE_SYM2STR_RET(FSCTL_TXFS_WRITE_BACKUP_INFORMATION2)
- + CASE_SYM2STR_RET(FSCTL_UNLOCK_VOLUME)
- + CASE_SYM2STR_RET(FSCTL_UNMAP_SPACE)
- + CASE_SYM2STR_RET(FSCTL_UPDATE_OVERLAY)
- + CASE_SYM2STR_RET(FSCTL_USN_TRACK_MODIFIED_RANGES)
- + CASE_SYM2STR_RET(FSCTL_VIRTUAL_STORAGE_PASSTHROUGH)
- + CASE_SYM2STR_RET(FSCTL_VIRTUAL_STORAGE_QUERY_PROPERTY)
- + CASE_SYM2STR_RET(FSCTL_VIRTUAL_STORAGE_SET_BEHAVIOR)
- + CASE_SYM2STR_RET(FSCTL_WAIT_FOR_REPAIR)
- + CASE_SYM2STR_RET(FSCTL_WRITE_RAW_ENCRYPTED)
- + CASE_SYM2STR_RET(FSCTL_WRITE_USN_CLOSE_RECORD)
- + CASE_SYM2STR_RET(FSCTL_WRITE_USN_REASON)
- + default:
- + return NULL;
- + break;
- + }
- +
- + /* not reached */
- +}
- diff --git a/sys/nfs41_debug.h b/sys/nfs41_debug.h
- index 6d649a6..a8f9f1c 100644
- --- a/sys/nfs41_debug.h
- +++ b/sys/nfs41_debug.h
- @@ -55,6 +55,7 @@ void print_open_error(int on, int status);
- void print_wait_status(int on, const char *str, NTSTATUS status,
- const char *opcode, PVOID entry, LONGLONG xid);
- void print_acl_args(SECURITY_INFORMATION info);
- +const char *fsctl2string(ULONG fsctl);
- #define PTR2PTRDIFF_T(p) (((char *)(p))-((char *)0))
- #define PsGetCurrentProcessShortDebugId() ((int)PTR2PTRDIFF_T(PsGetCurrentProcessId()))
- diff --git a/sys/nfs41_driver.c b/sys/nfs41_driver.c
- index 412e2d7..9c0d2ee 100644
- --- a/sys/nfs41_driver.c
- +++ b/sys/nfs41_driver.c
- @@ -6890,20 +6890,33 @@ NTSTATUS nfs41_FsCtl(
- DbgEn();
- print_debug_header(RxContext);
- #endif
- - switch (RxContext->LowIoContext.ParamsFor.FsCtl.FsControlCode) {
- + const ULONG fscontrolcode =
- + RxContext->LowIoContext.ParamsFor.FsCtl.FsControlCode;
- +
- + switch (fscontrolcode) {
- case FSCTL_SET_REPARSE_POINT:
- status = nfs41_SetReparsePoint(RxContext);
- break;
- -
- case FSCTL_GET_REPARSE_POINT:
- status = nfs41_GetReparsePoint(RxContext);
- break;
- -#ifdef DEBUG_FSCTL
- default:
- - DbgP("nfs41_FsCtl: FsControlCode: %d\n",
- - (int)RxContext->LowIoContext.ParamsFor.FsCtl.FsControlCode);
- -#endif
- + break;
- + }
- +
- +#ifdef DEBUG_FSCTL
- + const char *fsctl_str = fsctl2string(fscontrolcode);
- +
- + if (fsctl_str) {
- + DbgP("nfs41_FsCtl: FsControlCode='%s', status=0x%x\n",
- + fsctl_str, (int)status);
- }
- + else {
- + DbgP("nfs41_FsCtl: FsControlCode=0x%lx, status=0x%x\n",
- + (unsigned long)fscontrolcode, (int)status);
- + }
- +#endif /* DEBUG_FSCTL */
- +
- #ifdef DEBUG_FSCTL
- DbgEx();
- #endif
- --
- 2.43.0
- From 14805720d3247ccf7e6b45238334a3fab57bb04d Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Mon, 6 May 2024 14:44:24 +0200
- Subject: [PATCH 7/8] daemon: 32bit build cannot find
- |__RtlGetNtVersionNumbers()|
- Trying to build nfsd.exe as 32bit executable fails because
- |__RtlGetNtVersionNumbers()| cannot be found by the linker.
- For now we disable this for 32bit builds.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- daemon/util.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
- diff --git a/daemon/util.c b/daemon/util.c
- index 9915b06..9ea2b77 100644
- --- a/daemon/util.c
- +++ b/daemon/util.c
- @@ -708,6 +708,16 @@ bool getwinntversionnnumbers(
- DWORD *MinorVersionPtr,
- DWORD *BuildNumberPtr)
- {
- +#ifdef _WIN64
- + /*
- + * Windows private API, so we add prototype here ourselves
- + *
- + * Note that this currently only works with 64bit Windows,
- + * 32bit Windows generates this build error:
- + * ---- snip ----
- + * util.obj : error LNK2019: unresolved external symbol __RtlGetNtVersionNumbers referenced in function _getwinntversionnnumbers
- + * ---- snip ----
- + */
- NTSTATUS RtlGetNtVersionNumbers(LPDWORD, LPDWORD, LPDWORD);
- /*
- @@ -718,6 +728,9 @@ bool getwinntversionnnumbers(
- *BuildNumberPtr &= 0xffff;
- return true;
- +#else
- + return false;
- +#endif /* _WIN64 */
- }
- /*
- --
- 2.43.0
- From 9cc07d0281370442da7da7f7c919ae164d352f9e Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Tue, 7 May 2024 17:40:24 +0200
- Subject: [PATCH 8/8] sys: Keep client token refcounted for the lifetime of the
- |updowncall_entry|
- Keep the token of the calling thread refcounted for the lifetime of the
- |updowncall_entry|, otherwise ||SeImpersonateClientEx()| can crash
- when the calling thread exits before we can start the impersonation.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- sys/nfs41_driver.c | 87 ++++++++++++++++++++++++++++++++--------------
- 1 file changed, 60 insertions(+), 27 deletions(-)
- diff --git a/sys/nfs41_driver.c b/sys/nfs41_driver.c
- index 9c0d2ee..94c3070 100644
- --- a/sys/nfs41_driver.c
- +++ b/sys/nfs41_driver.c
- @@ -177,6 +177,12 @@ typedef struct _updowncall_entry {
- BOOLEAN async_op;
- SECURITY_CLIENT_CONTEXT sec_ctx;
- PSECURITY_CLIENT_CONTEXT psec_ctx;
- + /*
- + * Refcount client token during lifetime of this |updowncall_entry|
- + * to avoid crashes during |SeImpersonateClientEx()| if the
- + * calling thread disappears.
- + */
- + PVOID psec_ctx_clienttoken;
- HANDLE open_state;
- HANDLE session;
- PUNICODE_STRING filename;
- @@ -1562,14 +1568,39 @@ NTSTATUS nfs41_UpcallCreate(
- }
- SeReleaseSubjectContext(&sec_ctx);
- - } else
- + } else {
- entry->psec_ctx = clnt_sec_ctx;
- + }
- +
- + if (entry && entry->psec_ctx) {
- + /*
- + * Refcount client token (as |entry->psec_ctx_clienttoken|)
- + * during lifetime of this |updowncall_entry| to avoid
- + * crashes during |SeImpersonateClientEx()| if the
- + * calling client thread exits.
- + */
- + entry->psec_ctx_clienttoken = entry->psec_ctx->ClientToken;
- + ObReferenceObject(entry->psec_ctx_clienttoken);
- + }
- *entry_out = entry;
- out:
- return status;
- }
- +void nfs41_UpcallDestroy(nfs41_updowncall_entry *entry)
- +{
- + if (!entry)
- + return;
- +
- + if (entry->psec_ctx_clienttoken) {
- + ObDereferenceObject(entry->psec_ctx_clienttoken);
- + }
- +
- + RxFreePool(entry);
- +}
- +
- +
- NTSTATUS nfs41_UpcallWaitForReply(
- IN nfs41_updowncall_entry *entry,
- IN DWORD secs)
- @@ -2023,7 +2054,7 @@ NTSTATUS nfs41_downcall(
- }
- ExReleaseFastMutex(&cur->lock);
- nfs41_RemoveEntry(downcallLock, cur);
- - RxFreePool(cur);
- + nfs41_UpcallDestroy(cur);
- status = STATUS_UNSUCCESSFUL;
- goto out_free;
- }
- @@ -2086,7 +2117,7 @@ NTSTATUS nfs41_downcall(
- }
- nfs41_RemoveEntry(downcallLock, cur);
- RxLowIoCompletion(cur->u.ReadWrite.rxcontext);
- - RxFreePool(cur);
- + nfs41_UpcallDestroy(cur);
- } else
- KeSetEvent(&cur->cond, 0, FALSE);
- @@ -2114,7 +2145,7 @@ NTSTATUS nfs41_shutdown_daemon(
- entry->psec_ctx = NULL;
- if (status) goto out;
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- DbgEx();
- return status;
- @@ -2378,7 +2409,7 @@ NTSTATUS nfs41_unmount(
- SeDeleteClientSecurity(entry->psec_ctx);
- }
- entry->psec_ctx = NULL;
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- print_op_stat("lookup", &lookup, 1);
- @@ -2770,7 +2801,7 @@ NTSTATUS nfs41_mount(
- status = map_mount_errors(entry->status);
- if (status == STATUS_SUCCESS)
- *version = entry->version;
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef DEBUG_MOUNT
- DbgEx();
- @@ -3933,7 +3964,8 @@ retry_on_link:
- FALSE, FALSE, NULL);
- if (entry->u.Open.EaMdl == NULL) {
- status = STATUS_INTERNAL_ERROR;
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- + entry = NULL;
- goto out;
- }
- #pragma warning( push )
- @@ -4187,7 +4219,7 @@ retry_on_link:
- out_free:
- if (entry)
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -4359,7 +4391,7 @@ NTSTATUS nfs41_CloseSrvOpen(
- /* map windows ERRORs to NTSTATUS */
- status = map_close_errors(entry->status);
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -4503,7 +4535,7 @@ NTSTATUS nfs41_QueryDirectory(
- RxContext->Info.LengthRemaining, FALSE, FALSE, NULL);
- if (entry->u.QueryFile.mdl == NULL) {
- status = STATUS_INTERNAL_ERROR;
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- goto out;
- }
- #pragma warning( push )
- @@ -4543,7 +4575,7 @@ NTSTATUS nfs41_QueryDirectory(
- status = map_querydir_errors(entry->status);
- }
- IoFreeMdl(entry->u.QueryFile.mdl);
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -4751,7 +4783,7 @@ NTSTATUS nfs41_QueryVolumeInformation(
- } else {
- status = map_volume_errors(entry->status);
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -4963,7 +4995,8 @@ NTSTATUS nfs41_SetEaInformation(
- "(eainfo=%p, buflen=%lu, &(error_offset=%d))\n",
- (int)status, (void *)eainfo, buflen,
- (int)error_offset);
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- + entry = NULL;
- goto out;
- }
- }
- @@ -4987,7 +5020,7 @@ NTSTATUS nfs41_SetEaInformation(
- nfs41_fcb->changeattr = entry->ChangeTime;
- nfs41_fcb->mode = entry->u.SetEa.mode;
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -5090,7 +5123,7 @@ static NTSTATUS QueryCygwinSymlink(
- RxContext->InformationToReturn = HeaderLen +
- entry->u.Symlink.target->Length;
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- return status;
- }
- @@ -5253,7 +5286,7 @@ NTSTATUS nfs41_QueryEaInformation(
- } else {
- status = map_setea_error(entry->status);
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -5408,7 +5441,7 @@ NTSTATUS nfs41_QuerySecurityInformation(
- } else {
- status = map_query_acl_error(entry->status);
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -5522,7 +5555,7 @@ NTSTATUS nfs41_SetSecurityInformation(
- nfs41_update_fcb_list(RxContext->pFcb, entry->ChangeTime);
- nfs41_fcb->changeattr = entry->ChangeTime;
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -5699,7 +5732,7 @@ NTSTATUS nfs41_QueryFileInformation(
- status = map_queryfile_error(entry->status);
- print_error("status(0x%lx) = map_queryfile_error(entry->status(0x%lx));\n", (long)status, (long)entry->status);
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -5949,7 +5982,7 @@ NTSTATUS nfs41_SetFileInformation(
- nfs41_update_fcb_list(RxContext->pFcb, entry->ChangeTime);
- nfs41_fcb->changeattr = entry->ChangeTime;
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -6219,7 +6252,7 @@ NTSTATUS nfs41_Read(
- RxContext->CurrentIrp->IoStatus.Status = status;
- RxContext->IoStatusBlock.Information = 0;
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -6347,7 +6380,7 @@ NTSTATUS nfs41_Write(
- RxContext->CurrentIrp->IoStatus.Status = status;
- RxContext->IoStatusBlock.Information = 0;
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -6500,7 +6533,7 @@ retry_upcall:
- status = map_lock_errors(entry->status);
- RxContext->CurrentIrp->IoStatus.Status = status;
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -6596,7 +6629,7 @@ NTSTATUS nfs41_Unlock(
- status = map_lock_errors(entry->status);
- RxContext->CurrentIrp->IoStatus.Status = status;
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef ENABLE_TIMINGS
- t2 = KeQueryPerformanceCounter(NULL);
- @@ -6767,7 +6800,7 @@ NTSTATUS nfs41_SetReparsePoint(
- if (status) goto out;
- status = map_symlink_errors(entry->status);
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef DEBUG_SYMLINK
- DbgEx();
- @@ -6874,7 +6907,7 @@ NTSTATUS nfs41_GetReparsePoint(
- } else if (status == STATUS_BUFFER_TOO_SMALL) {
- RxContext->InformationToReturn = HeaderLen + TargetName.Length;
- }
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- #ifdef DEBUG_SYMLINK
- DbgEx();
- @@ -7199,7 +7232,7 @@ VOID fcbopen_main(PVOID ctx)
- }
- nfs41_fcb = (PNFS41_FCB)cur->fcb->Context;
- nfs41_fcb->changeattr = entry->ChangeTime;
- - RxFreePool(entry);
- + nfs41_UpcallDestroy(entry);
- out:
- if (pEntry->Flink == &openlist.head) {
- #ifdef DEBUG_TIME_BASED_COHERENCY
- --
- 2.43.0
msnfs41client: Patchs for impersonation token refcounting, perf, 32bit fixes+misc, 2024-05-07
Posted by Anonymous on Tue 7th May 2024 16:49
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.