Page MenuHomeFreeBSD

D11741.diff
No OneTemporary

D11741.diff

Index: head/lib/libutil/pidfile.c
===================================================================
--- head/lib/libutil/pidfile.c
+++ head/lib/libutil/pidfile.c
@@ -28,6 +28,7 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
+#include <sys/capsicum.h>
#include <sys/file.h>
#include <sys/stat.h>
@@ -103,6 +104,7 @@
struct stat sb;
int error, fd, dirfd, dirlen, filenamelen, count;
struct timespec rqtp;
+ cap_rights_t caprights;
pfh = malloc(sizeof(*pfh));
if (pfh == NULL)
@@ -179,21 +181,35 @@
* to the proper descriptor.
*/
if (fstat(fd, &sb) == -1) {
- error = errno;
- unlinkat(dirfd, pfh->pf_filename, 0);
- close(dirfd);
- close(fd);
- free(pfh);
- errno = error;
- return (NULL);
+ goto failed;
}
+ if (cap_rights_limit(dirfd,
+ cap_rights_init(&caprights, CAP_UNLINKAT)) < 0 && errno != ENOSYS) {
+ goto failed;
+ }
+
+ if (cap_rights_limit(fd, cap_rights_init(&caprights, CAP_PWRITE,
+ CAP_FSTAT, CAP_FTRUNCATE)) < 0 &&
+ errno != ENOSYS) {
+ goto failed;
+ }
+
pfh->pf_dirfd = dirfd;
pfh->pf_fd = fd;
pfh->pf_dev = sb.st_dev;
pfh->pf_ino = sb.st_ino;
return (pfh);
+
+failed:
+ error = errno;
+ unlinkat(dirfd, pfh->pf_filename, 0);
+ close(dirfd);
+ close(fd);
+ free(pfh);
+ errno = error;
+ return (NULL);
}
int

File Metadata

Mime Type
text/plain
Expires
Sun, Feb 1, 1:48 AM (5 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28244359
Default Alt Text
D11741.diff (1 KB)

Event Timeline