diff options
author | Denis Vlasenko | 2007-04-10 15:43:37 +0000 |
---|---|---|
committer | Denis Vlasenko | 2007-04-10 15:43:37 +0000 |
commit | 99912ca733dd960f5589227fd999c86e73c8e894 (patch) | |
tree | 9df947fc08884d498cf76a02204d74b121064134 /libbb | |
parent | ff131b980d524a33d8a43cefe65e14f64a43f2da (diff) | |
download | busybox-99912ca733dd960f5589227fd999c86e73c8e894.zip busybox-99912ca733dd960f5589227fd999c86e73c8e894.tar.gz |
audit small applets and mark some of them as NOFORK.
Put big scary warnings in relevant places.
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/copyfd.c | 11 | ||||
-rw-r--r-- | libbb/fflush_stdout_and_exit.c | 4 | ||||
-rw-r--r-- | libbb/make_directory.c | 5 | ||||
-rw-r--r-- | libbb/parse_mode.c | 2 | ||||
-rw-r--r-- | libbb/remove_file.c | 2 |
5 files changed, 14 insertions, 10 deletions
diff --git a/libbb/copyfd.c b/libbb/copyfd.c index 805b801..e0596d5 100644 --- a/libbb/copyfd.c +++ b/libbb/copyfd.c @@ -7,19 +7,15 @@ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ -#include <errno.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - #include "libbb.h" - #if BUFSIZ < 4096 #undef BUFSIZ #define BUFSIZ 4096 #endif +/* Used by NOFORK applets (e.g. cat) - must be very careful + * when calling xfuncs, allocating memory, with signals, termios, etc... */ static off_t bb_full_fd_action(int src_fd, int dst_fd, off_t size) { @@ -27,7 +23,8 @@ static off_t bb_full_fd_action(int src_fd, int dst_fd, off_t size) off_t total = 0; RESERVE_CONFIG_BUFFER(buffer, BUFSIZ); - if (src_fd < 0) goto out; + if (src_fd < 0) + goto out; if (!size) { size = BUFSIZ; diff --git a/libbb/fflush_stdout_and_exit.c b/libbb/fflush_stdout_and_exit.c index 6f44770..ae68222 100644 --- a/libbb/fflush_stdout_and_exit.c +++ b/libbb/fflush_stdout_and_exit.c @@ -13,6 +13,10 @@ #include "libbb.h" +// TODO: make it safe to call from NOFORK applets +// Currently, it can exit(0). Even if it is made to do longjmp trick +// (see sleep_and_die internals), zero cannot be passed thru this way! + void fflush_stdout_and_exit(int retval) { if (fflush(stdout)) diff --git a/libbb/make_directory.c b/libbb/make_directory.c index fbec4e2..d540ad1 100644 --- a/libbb/make_directory.c +++ b/libbb/make_directory.c @@ -22,11 +22,10 @@ * val. Otherwise, pass -1 to get default permissions. */ -#include <errno.h> -#include <unistd.h> -#include <sys/stat.h> #include "libbb.h" +/* This function is used from NOFORK applets. It must not allocate anything */ + int bb_make_directory (char *path, long mode, int flags) { mode_t mask; diff --git a/libbb/parse_mode.c b/libbb/parse_mode.c index 3ab4eb6..a31bd4b 100644 --- a/libbb/parse_mode.c +++ b/libbb/parse_mode.c @@ -11,6 +11,8 @@ #include "libbb.h" +/* This function is used from NOFORK applets. It must not allocate anything */ + #define FILEMODEBITS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) int bb_parse_mode(const char *s, mode_t *current_mode) diff --git a/libbb/remove_file.c b/libbb/remove_file.c index 3aaaef8..3edc91d 100644 --- a/libbb/remove_file.c +++ b/libbb/remove_file.c @@ -9,6 +9,8 @@ #include "libbb.h" +/* Used from NOFORK applets. Must not allocate anything */ + int remove_file(const char *path, int flags) { struct stat path_stat; |