8130910: hsperfdata file is created in wrong directory and not cleaned up if /tmp/hsperfdata_<username> has wrong permissions
Add check for fchir() failure and disable shared PerfMemory in that case. Reviewed-by: dcubed, simonis, gthornbr
This commit is contained in:
parent
96644d2fb6
commit
029c5bbc36
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -454,13 +454,27 @@ static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
|
||||
*saved_cwd_fd = result;
|
||||
}
|
||||
|
||||
// Set the current directory to dirname by using the fd of the directory.
|
||||
// Set the current directory to dirname by using the fd of the directory and
|
||||
// handle errors, otherwise shared memory files will be created in cwd.
|
||||
result = fchdir(fd);
|
||||
|
||||
return dirp;
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not change to directory %s", dirname);
|
||||
}
|
||||
if (*saved_cwd_fd != -1) {
|
||||
::close(*saved_cwd_fd);
|
||||
*saved_cwd_fd = -1;
|
||||
}
|
||||
// Close the directory.
|
||||
os::closedir(dirp);
|
||||
return NULL;
|
||||
} else {
|
||||
return dirp;
|
||||
}
|
||||
}
|
||||
|
||||
// Close the directory and restore the current working directory.
|
||||
//
|
||||
static void close_directory_secure_cwd(DIR* dirp, int saved_cwd_fd) {
|
||||
|
||||
int result;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2015, 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
|
||||
@ -375,10 +375,23 @@ static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
|
||||
*saved_cwd_fd = result;
|
||||
}
|
||||
|
||||
// Set the current directory to dirname by using the fd of the directory.
|
||||
// Set the current directory to dirname by using the fd of the directory and
|
||||
// handle errors, otherwise shared memory files will be created in cwd.
|
||||
result = fchdir(fd);
|
||||
|
||||
return dirp;
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not change to directory %s", dirname);
|
||||
}
|
||||
if (*saved_cwd_fd != -1) {
|
||||
::close(*saved_cwd_fd);
|
||||
*saved_cwd_fd = -1;
|
||||
}
|
||||
// Close the directory.
|
||||
os::closedir(dirp);
|
||||
return NULL;
|
||||
} else {
|
||||
return dirp;
|
||||
}
|
||||
}
|
||||
|
||||
// Close the directory and restore the current working directory.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2015, 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
|
||||
@ -374,10 +374,23 @@ static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
|
||||
*saved_cwd_fd = result;
|
||||
}
|
||||
|
||||
// Set the current directory to dirname by using the fd of the directory.
|
||||
// Set the current directory to dirname by using the fd of the directory and
|
||||
// handle errors, otherwise shared memory files will be created in cwd.
|
||||
result = fchdir(fd);
|
||||
|
||||
return dirp;
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not change to directory %s", dirname);
|
||||
}
|
||||
if (*saved_cwd_fd != -1) {
|
||||
::close(*saved_cwd_fd);
|
||||
*saved_cwd_fd = -1;
|
||||
}
|
||||
// Close the directory.
|
||||
os::closedir(dirp);
|
||||
return NULL;
|
||||
} else {
|
||||
return dirp;
|
||||
}
|
||||
}
|
||||
|
||||
// Close the directory and restore the current working directory.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2015, 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
|
||||
@ -377,10 +377,23 @@ static DIR *open_directory_secure_cwd(const char* dirname, int *saved_cwd_fd) {
|
||||
*saved_cwd_fd = result;
|
||||
}
|
||||
|
||||
// Set the current directory to dirname by using the fd of the directory.
|
||||
// Set the current directory to dirname by using the fd of the directory and
|
||||
// handle errors, otherwise shared memory files will be created in cwd.
|
||||
result = fchdir(fd);
|
||||
|
||||
return dirp;
|
||||
if (result == OS_ERR) {
|
||||
if (PrintMiscellaneous && Verbose) {
|
||||
warning("could not change to directory %s", dirname);
|
||||
}
|
||||
if (*saved_cwd_fd != -1) {
|
||||
::close(*saved_cwd_fd);
|
||||
*saved_cwd_fd = -1;
|
||||
}
|
||||
// Close the directory.
|
||||
os::closedir(dirp);
|
||||
return NULL;
|
||||
} else {
|
||||
return dirp;
|
||||
}
|
||||
}
|
||||
|
||||
// Close the directory and restore the current working directory.
|
||||
|
Loading…
Reference in New Issue
Block a user