summaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenis Vlasenko2007-04-10 15:43:37 +0000
committerDenis Vlasenko2007-04-10 15:43:37 +0000
commit99912ca733dd960f5589227fd999c86e73c8e894 (patch)
tree9df947fc08884d498cf76a02204d74b121064134 /libbb
parentff131b980d524a33d8a43cefe65e14f64a43f2da (diff)
downloadbusybox-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.c11
-rw-r--r--libbb/fflush_stdout_and_exit.c4
-rw-r--r--libbb/make_directory.c5
-rw-r--r--libbb/parse_mode.c2
-rw-r--r--libbb/remove_file.c2
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;