changeset 13125:75421e94b5a9

8207145: (fs) Native memory leak in WindowsNativeDispatcher.LookupPrivilegeValue0 Reviewed-by: alanb
author igerasim
date Mon, 30 Jul 2018 17:10:28 -0700
parents 63b1e705ac7d
children b83c49e24691
files src/windows/classes/sun/nio/fs/WindowsSecurity.java src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c
diffstat 2 files changed, 10 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/windows/classes/sun/nio/fs/WindowsSecurity.java	Mon Jul 30 17:09:50 2018 -0700
+++ b/src/windows/classes/sun/nio/fs/WindowsSecurity.java	Mon Jul 30 17:10:28 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -102,9 +102,8 @@
         final boolean stopImpersontating = impersontating;
         final boolean needToRevert = elevated;
 
-        return new Privilege() {
-            @Override
-            public void drop() {
+        return () -> {
+            try {
                 if (token != 0L) {
                     try {
                         if (stopImpersontating)
@@ -118,6 +117,8 @@
                         CloseHandle(token);
                     }
                 }
+            } finally {
+                LocalFree(pLuid);
             }
         };
     }
--- a/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c	Mon Jul 30 17:09:50 2018 -0700
+++ b/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c	Mon Jul 30 17:10:28 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1074,8 +1074,11 @@
     if (pLuid == NULL) {
         JNU_ThrowInternalError(env, "Unable to allocate LUID structure");
     } else {
-        if (LookupPrivilegeValueW(NULL, lpName, pLuid) == 0)
+        if (LookupPrivilegeValueW(NULL, lpName, pLuid) == 0) {
+            LocalFree(pLuid);
             throwWindowsException(env, GetLastError());
+            return (jlong)0;
+        }
     }
     return ptr_to_jlong(pLuid);
 }