[driver] changing structure to pointer
NFS41_MOUNT_CONFIG structure was allocated on the stack and it's over 2046bytes. Allocating it from the heap to reduce stack size.
This commit is contained in:
parent
bcc0ed71cb
commit
11a13bef0f
1 changed files with 28 additions and 20 deletions
|
|
@ -2843,7 +2843,7 @@ NTSTATUS nfs41_CreateVNetRoot(
|
||||||
IN OUT PMRX_CREATENETROOT_CONTEXT pCreateNetRootContext)
|
IN OUT PMRX_CREATENETROOT_CONTEXT pCreateNetRootContext)
|
||||||
{
|
{
|
||||||
NTSTATUS status = STATUS_SUCCESS;
|
NTSTATUS status = STATUS_SUCCESS;
|
||||||
NFS41_MOUNT_CONFIG Config;
|
NFS41_MOUNT_CONFIG *Config;
|
||||||
__notnull PMRX_V_NET_ROOT pVNetRoot = (PMRX_V_NET_ROOT)
|
__notnull PMRX_V_NET_ROOT pVNetRoot = (PMRX_V_NET_ROOT)
|
||||||
pCreateNetRootContext->pVNetRoot;
|
pCreateNetRootContext->pVNetRoot;
|
||||||
__notnull PMRX_NET_ROOT pNetRoot = pVNetRoot->pNetRoot;
|
__notnull PMRX_NET_ROOT pNetRoot = pVNetRoot->pNetRoot;
|
||||||
|
|
@ -2895,38 +2895,44 @@ NTSTATUS nfs41_CreateVNetRoot(
|
||||||
pNetRoot->MRxNetRootState = MRX_NET_ROOT_STATE_GOOD;
|
pNetRoot->MRxNetRootState = MRX_NET_ROOT_STATE_GOOD;
|
||||||
pNetRoot->DeviceType = FILE_DEVICE_DISK;
|
pNetRoot->DeviceType = FILE_DEVICE_DISK;
|
||||||
|
|
||||||
nfs41_MountConfig_InitDefaults(&Config);
|
Config = RxAllocatePoolWithTag(NonPagedPool,
|
||||||
|
sizeof(NFS41_MOUNT_CONFIG), NFS41_MM_POOLTAG);
|
||||||
|
if (Config == NULL) {
|
||||||
|
status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
nfs41_MountConfig_InitDefaults(Config);
|
||||||
|
|
||||||
if (pCreateNetRootContext->RxContext->Create.EaLength) {
|
if (pCreateNetRootContext->RxContext->Create.EaLength) {
|
||||||
/* parse the extended attributes for mount options */
|
/* parse the extended attributes for mount options */
|
||||||
status = nfs41_MountConfig_ParseOptions(
|
status = nfs41_MountConfig_ParseOptions(
|
||||||
pCreateNetRootContext->RxContext->Create.EaBuffer,
|
pCreateNetRootContext->RxContext->Create.EaBuffer,
|
||||||
pCreateNetRootContext->RxContext->Create.EaLength,
|
pCreateNetRootContext->RxContext->Create.EaLength,
|
||||||
&Config);
|
Config);
|
||||||
if (status != STATUS_SUCCESS)
|
if (status != STATUS_SUCCESS)
|
||||||
goto out;
|
goto out_free;
|
||||||
pVNetRootContext->read_only = Config.ReadOnly;
|
pVNetRootContext->read_only = Config->ReadOnly;
|
||||||
pVNetRootContext->write_thru = Config.write_thru;
|
pVNetRootContext->write_thru = Config->write_thru;
|
||||||
pVNetRootContext->nocache = Config.nocache;
|
pVNetRootContext->nocache = Config->nocache;
|
||||||
} else {
|
} else {
|
||||||
/* use the SRV_CALL name (without leading \) as the hostname */
|
/* use the SRV_CALL name (without leading \) as the hostname */
|
||||||
Config.SrvName.Buffer = pSrvCall->pSrvCallName->Buffer + 1;
|
Config->SrvName.Buffer = pSrvCall->pSrvCallName->Buffer + 1;
|
||||||
Config.SrvName.Length =
|
Config->SrvName.Length =
|
||||||
pSrvCall->pSrvCallName->Length - sizeof(WCHAR);
|
pSrvCall->pSrvCallName->Length - sizeof(WCHAR);
|
||||||
Config.SrvName.MaximumLength =
|
Config->SrvName.MaximumLength =
|
||||||
pSrvCall->pSrvCallName->MaximumLength - sizeof(WCHAR);
|
pSrvCall->pSrvCallName->MaximumLength - sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
pVNetRootContext->timeout = Config.timeout;
|
pVNetRootContext->timeout = Config->timeout;
|
||||||
|
|
||||||
status = map_sec_flavor(&Config.SecFlavor, &pVNetRootContext->sec_flavor);
|
status = map_sec_flavor(&Config->SecFlavor, &pVNetRootContext->sec_flavor);
|
||||||
if (status != STATUS_SUCCESS) {
|
if (status != STATUS_SUCCESS) {
|
||||||
DbgP("Invalid rpcsec security flavor %wZ\n", &Config.SecFlavor);
|
DbgP("Invalid rpcsec security flavor %wZ\n", &Config->SecFlavor);
|
||||||
goto out;
|
goto out_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = nfs41_GetLUID(&luid);
|
status = nfs41_GetLUID(&luid);
|
||||||
if (status)
|
if (status)
|
||||||
goto out;
|
goto out_free;
|
||||||
|
|
||||||
if (!pNetRootContext->mounts_init) {
|
if (!pNetRootContext->mounts_init) {
|
||||||
#ifdef DEBUG_MOUNT
|
#ifdef DEBUG_MOUNT
|
||||||
|
|
@ -2937,7 +2943,7 @@ NTSTATUS nfs41_CreateVNetRoot(
|
||||||
sizeof(nfs41_mount_list), NFS41_MM_POOLTAG_MOUNT);
|
sizeof(nfs41_mount_list), NFS41_MM_POOLTAG_MOUNT);
|
||||||
if (pNetRootContext->mounts == NULL) {
|
if (pNetRootContext->mounts == NULL) {
|
||||||
status = STATUS_INSUFFICIENT_RESOURCES;
|
status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto out;
|
goto out_free;
|
||||||
}
|
}
|
||||||
InitializeListHead(&pNetRootContext->mounts->head);
|
InitializeListHead(&pNetRootContext->mounts->head);
|
||||||
pNetRootContext->mounts_init = TRUE;
|
pNetRootContext->mounts_init = TRUE;
|
||||||
|
|
@ -2995,7 +3001,7 @@ NTSTATUS nfs41_CreateVNetRoot(
|
||||||
|
|
||||||
if (!found_existing_mount || !found_matching_flavor) {
|
if (!found_existing_mount || !found_matching_flavor) {
|
||||||
/* send the mount upcall */
|
/* send the mount upcall */
|
||||||
status = nfs41_mount(&Config, pVNetRootContext->sec_flavor,
|
status = nfs41_mount(Config, pVNetRootContext->sec_flavor,
|
||||||
&pVNetRootContext->session, &nfs41d_version,
|
&pVNetRootContext->session, &nfs41d_version,
|
||||||
&pVNetRootContext->FsAttrs);
|
&pVNetRootContext->FsAttrs);
|
||||||
if (status != STATUS_SUCCESS) {
|
if (status != STATUS_SUCCESS) {
|
||||||
|
|
@ -3005,9 +3011,9 @@ NTSTATUS nfs41_CreateVNetRoot(
|
||||||
pNetRootContext->mounts_init = FALSE;
|
pNetRootContext->mounts_init = FALSE;
|
||||||
pVNetRootContext->session = INVALID_HANDLE_VALUE;
|
pVNetRootContext->session = INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
goto out;
|
goto out_free;
|
||||||
}
|
}
|
||||||
pVNetRootContext->timeout = Config.timeout;
|
pVNetRootContext->timeout = Config->timeout;
|
||||||
RtlCopyMemory(&pNetRootContext->FsAttrs, &pVNetRootContext->FsAttrs,
|
RtlCopyMemory(&pNetRootContext->FsAttrs, &pVNetRootContext->FsAttrs,
|
||||||
sizeof(pVNetRootContext->FsAttrs));
|
sizeof(pVNetRootContext->FsAttrs));
|
||||||
}
|
}
|
||||||
|
|
@ -3020,7 +3026,7 @@ NTSTATUS nfs41_CreateVNetRoot(
|
||||||
if (entry == NULL) {
|
if (entry == NULL) {
|
||||||
status = STATUS_INSUFFICIENT_RESOURCES;
|
status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
RxFreePool(pNetRootContext->mounts);
|
RxFreePool(pNetRootContext->mounts);
|
||||||
goto out;
|
goto out_free;
|
||||||
}
|
}
|
||||||
entry->authsys_session = entry->gss_session =
|
entry->authsys_session = entry->gss_session =
|
||||||
entry->gssi_session = entry->gssp_session = INVALID_HANDLE_VALUE;
|
entry->gssi_session = entry->gssp_session = INVALID_HANDLE_VALUE;
|
||||||
|
|
@ -3065,6 +3071,8 @@ NTSTATUS nfs41_CreateVNetRoot(
|
||||||
&pVNetRootContext->mount_sec_ctx);
|
&pVNetRootContext->mount_sec_ctx);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
out_free:
|
||||||
|
RxFreePool(Config);
|
||||||
out:
|
out:
|
||||||
pCreateNetRootContext->VirtualNetRootStatus = status;
|
pCreateNetRootContext->VirtualNetRootStatus = status;
|
||||||
if (pNetRoot->Context == NULL)
|
if (pNetRoot->Context == NULL)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue