|
Matej Habrnal |
fa1950 |
From ce7d0e05de76ae5383bcdfdba3ffa8816ffb63bd Mon Sep 17 00:00:00 2001
|
|
Matej Habrnal |
fa1950 |
From: Jakub Filak <jfilak@redhat.com>
|
|
Matej Habrnal |
fa1950 |
Date: Wed, 13 May 2015 13:05:48 +0200
|
|
Matej Habrnal |
fa1950 |
Subject: [PATCH] ccpp: make saving of binary more robust
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
Do not override existing files (defend against hard | symbolic link
|
|
Matej Habrnal |
fa1950 |
attacks) and use the *at functions (defend against race conditions).
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
Signed-off-by: Jakub Filak <jfilak@redhat.com>
|
|
Matej Habrnal |
fa1950 |
---
|
|
Matej Habrnal |
fa1950 |
src/hooks/abrt-hook-ccpp.c | 12 +++++-------
|
|
Matej Habrnal |
fa1950 |
1 file changed, 5 insertions(+), 7 deletions(-)
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
diff --git a/src/hooks/abrt-hook-ccpp.c b/src/hooks/abrt-hook-ccpp.c
|
|
Matej Habrnal |
fa1950 |
index 8f3b2b0..9d9f549 100644
|
|
Matej Habrnal |
fa1950 |
--- a/src/hooks/abrt-hook-ccpp.c
|
|
Matej Habrnal |
fa1950 |
+++ b/src/hooks/abrt-hook-ccpp.c
|
|
Matej Habrnal |
fa1950 |
@@ -379,7 +379,7 @@ static int test_configuration(bool setting_SaveFullCore, bool setting_CreateCore
|
|
Matej Habrnal |
fa1950 |
return 0;
|
|
Matej Habrnal |
fa1950 |
}
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
-int save_crashing_binary(pid_t pid, const char *dest_path, uid_t uid, gid_t gid)
|
|
Matej Habrnal |
fa1950 |
+static int save_crashing_binary(pid_t pid, struct dump_dir *dd)
|
|
Matej Habrnal |
fa1950 |
{
|
|
Matej Habrnal |
fa1950 |
char buf[sizeof("/proc/%lu/exe") + sizeof(long)*3];
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
@@ -391,15 +391,15 @@ int save_crashing_binary(pid_t pid, const char *dest_path, uid_t uid, gid_t gid)
|
|
Matej Habrnal |
fa1950 |
return 0;
|
|
Matej Habrnal |
fa1950 |
}
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
- int dst_fd = open(dest_path, O_WRONLY | O_CREAT | O_TRUNC, DEFAULT_DUMP_DIR_MODE);
|
|
Matej Habrnal |
fa1950 |
+ int dst_fd = openat(dd->dd_fd, FILENAME_BINARY, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, DEFAULT_DUMP_DIR_MODE);
|
|
Matej Habrnal |
fa1950 |
if (dst_fd < 0)
|
|
Matej Habrnal |
fa1950 |
{
|
|
Matej Habrnal |
fa1950 |
- log_notice("Failed to create file '%s'", dest_path);
|
|
Matej Habrnal |
fa1950 |
+ log_notice("Failed to create file '"FILENAME_BINARY"' at '%s'", dd->dd_dirname);
|
|
Matej Habrnal |
fa1950 |
close(src_fd_binary);
|
|
Matej Habrnal |
fa1950 |
return -1;
|
|
Matej Habrnal |
fa1950 |
}
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
- IGNORE_RESULT(fchown(dst_fd, uid, gid));
|
|
Matej Habrnal |
fa1950 |
+ IGNORE_RESULT(fchown(dst_fd, dd->dd_uid, dd->dd_gid));
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
off_t sz = copyfd_eof(src_fd_binary, dst_fd, COPYFD_SPARSE);
|
|
Matej Habrnal |
fa1950 |
close(src_fd_binary);
|
|
Matej Habrnal |
fa1950 |
@@ -701,9 +701,7 @@ int main(int argc, char** argv)
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
if (setting_SaveBinaryImage)
|
|
Matej Habrnal |
fa1950 |
{
|
|
Matej Habrnal |
fa1950 |
- strcpy(path + path_len, "/"FILENAME_BINARY);
|
|
Matej Habrnal |
fa1950 |
-
|
|
Matej Habrnal |
fa1950 |
- if (save_crashing_binary(pid, path, dd->dd_uid, dd->dd_gid))
|
|
Matej Habrnal |
fa1950 |
+ if (save_crashing_binary(pid, dd))
|
|
Matej Habrnal |
fa1950 |
{
|
|
Matej Habrnal |
fa1950 |
error_msg("Error saving '%s'", path);
|
|
Matej Habrnal |
fa1950 |
|
|
Matej Habrnal |
fa1950 |
--
|
|
Matej Habrnal |
fa1950 |
2.1.0
|
|
Matej Habrnal |
fa1950 |
|