From 59aff469464c3a525663ce9f40a80efb124b5d92 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Mon, 6 Jul 2015 01:38:01 -0400 Subject: [PATCH] Windows: NetrShareGetInfo no return buffer on error When processing the NetrShareGetInfo() pipe service rpc do not allocate memory for the return buffer is the path cannot be found. Reviewed-on: http://gerrit.openafs.org/11923 Tested-by: BuildBot Reviewed-by: Jeffrey Altman (cherry picked from commit a640e76d0f84c647abfe4968c842c0cb33f670e5) Change-Id: If9636d5341e9bf7371ff4107af392c2876563f1e Reviewed-on: http://gerrit.openafs.org/12025 Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- src/WINNT/afsd/rpc_srvsvc.c | 44 +++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/WINNT/afsd/rpc_srvsvc.c b/src/WINNT/afsd/rpc_srvsvc.c index 6ad1646cdd..5a403ccb7b 100644 --- a/src/WINNT/afsd/rpc_srvsvc.c +++ b/src/WINNT/afsd/rpc_srvsvc.c @@ -735,22 +735,7 @@ NET_API_STATUS NetrShareGetInfo( dscp = cm_RootSCachep(userp, &req); - /* Allocate the memory for the response */ - switch (Level) { - case 2: - InfoStruct->ShareInfo2 = MIDL_user_allocate(sizeof(SHARE_INFO_2)); - break; - case 1: - InfoStruct->ShareInfo1 = MIDL_user_allocate(sizeof(SHARE_INFO_1)); - break; - case 0: - InfoStruct->ShareInfo0 = MIDL_user_allocate(sizeof(SHARE_INFO_0)); - break; - } - - if (InfoStruct->ShareInfo0 == NULL) { - return ERROR_NOT_ENOUGH_MEMORY; - } + InfoStruct->ShareInfo0 = NULL; /* * NetName will be: @@ -850,6 +835,33 @@ NET_API_STATUS NetrShareGetInfo( } if (scp) { + /* Allocate the memory for the response */ + switch (Level) { + case 2: + InfoStruct->ShareInfo2 = MIDL_user_allocate(sizeof(SHARE_INFO_2)); + break; + case 1: + InfoStruct->ShareInfo1 = MIDL_user_allocate(sizeof(SHARE_INFO_1)); + break; + case 0: + InfoStruct->ShareInfo0 = MIDL_user_allocate(sizeof(SHARE_INFO_0)); + break; + case 501: + case 502: + case 503: + case 1004: + case 1005: + case 1006: + default: + cm_ReleaseSCache(scp); + return HRESULT_FROM_WIN32(ERROR_INVALID_LEVEL); + } + + if (InfoStruct->ShareInfo0 == NULL) { + cm_ReleaseSCache(scp); + return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); + } + switch (Level) { case 2: /* for share level security */