Skip to content

Commit

Permalink
annotate some functions as non-returning (#3574)
Browse files Browse the repository at this point in the history
  • Loading branch information
reinerh committed Aug 8, 2020
1 parent b75c9ed commit ce1b254
Show file tree
Hide file tree
Showing 11 changed files with 34 additions and 41 deletions.
4 changes: 1 addition & 3 deletions src/firejail/arp.c
Original file line number Diff line number Diff line change
Expand Up @@ -239,9 +239,7 @@ int arp_check(const char *dev, uint32_t destaddr) {
}
}

// it will never get here!
close(sock);
return -1;
__builtin_unreachable();
}

// assign a random IP address and check it
Expand Down
35 changes: 17 additions & 18 deletions src/firejail/firejail.h
Original file line number Diff line number Diff line change
Expand Up @@ -371,14 +371,14 @@ char *guess_shell(void);

// sandbox.c
int sandbox(void* sandbox_arg);
void start_application(int no_sandbox, FILE *fp);
void start_application(int no_sandbox, FILE *fp) __attribute__((noreturn));
void set_apparmor(void);

// network_main.c
void net_configure_sandbox_ip(Bridge *br);
void net_configure_veth_pair(Bridge *br, const char *ifname, pid_t child);
void net_check_cfg(void);
void net_dns_print(pid_t pid);
void net_dns_print(pid_t pid) __attribute__((noreturn));
void network_main(pid_t child);
void net_print(pid_t pid);

Expand Down Expand Up @@ -453,13 +453,12 @@ void profile_add_ignore(const char *str);
void list(void);
void tree(void);
void top(void);
void netstats(void);

// usage.c
void usage(void);

// join.c
void join(pid_t pid, int argc, char **argv, int index);
void join(pid_t pid, int argc, char **argv, int index) __attribute__((noreturn));
bool is_ready_for_join(const pid_t pid);
void check_join_permission(pid_t pid);
pid_t switch_to_child(pid_t pid);
Expand All @@ -486,7 +485,7 @@ int macro_id(const char *name);


// util.c
void errLogExit(char* fmt, ...);
void errLogExit(char* fmt, ...) __attribute__((noreturn));
void fwarning(char* fmt, ...);
void fmessage(char* fmt, ...);
void drop_privs(int nogroups);
Expand Down Expand Up @@ -584,7 +583,7 @@ int seccomp_load(const char *fname);
int seccomp_filter_drop(bool native);
int seccomp_filter_keep(bool native);
int seccomp_filter_mdwx(bool native);
void seccomp_print_filter(pid_t pid);
void seccomp_print_filter(pid_t pid) __attribute__((noreturn));

// caps.c
void seccomp_load_file_list(void);
Expand All @@ -595,7 +594,7 @@ void caps_set(uint64_t caps);
void caps_check_list(const char *clist, void (*callback)(int));
void caps_drop_list(const char *clist);
void caps_keep_list(const char *clist);
void caps_print_filter(pid_t pid);
void caps_print_filter(pid_t pid) __attribute__((noreturn));
void caps_drop_dac_override(void);

// fs_trace.c
Expand All @@ -618,7 +617,7 @@ void read_cpu_list(const char *str);
void set_cpu_affinity(void);
void load_cpu(const char *fname);
void save_cpu(void);
void cpu_print_filter(pid_t pid);
void cpu_print_filter(pid_t pid) __attribute__((noreturn));

// cgroup.c
void save_cgroup(void);
Expand All @@ -640,7 +639,7 @@ void netns(const char *nsname);
void netns_mounts(const char *nsname);

// bandwidth.c
void bandwidth_pid(pid_t pid, const char *command, const char *dev, int down, int up);
void bandwidth_pid(pid_t pid, const char *command, const char *dev, int down, int up) __attribute__((noreturn));
void network_set_run_file(pid_t pid);

// fs_etc.c
Expand All @@ -650,7 +649,7 @@ void fs_private_dir_list(const char *private_dir, const char *private_run_dir, c
// no_sandbox.c
int check_namespace_virt(void);
int check_kernel_procs(void);
void run_no_sandbox(int argc, char **argv);
void run_no_sandbox(int argc, char **argv) __attribute__((noreturn));

#define MAX_ENVS 256 // some sane maximum number of environment variables
#define MAX_ENV_LEN (PATH_MAX + 32) // FOOBAR=SOME_PATH
Expand Down Expand Up @@ -681,7 +680,7 @@ void fs_private_lib(void);
// protocol.c
void protocol_filter_save(void);
void protocol_filter_load(const char *fname);
void protocol_print_filter(pid_t pid);
void protocol_print_filter(pid_t pid) __attribute__((noreturn));

// restrict_users.c
void restrict_users(void);
Expand All @@ -693,7 +692,7 @@ void fs_logger2int(const char *msg1, int d);
void fs_logger3(const char *msg1, const char *msg2, const char *msg3);
void fs_logger_print(void);
void fs_logger_change_owner(void);
void fs_logger_print_log(pid_t pid);
void fs_logger_print_log(pid_t pid) __attribute__((noreturn));

// run_symlink.c
void run_symlink(int argc, char **argv, int run_as_is);
Expand All @@ -719,11 +718,11 @@ void fs_mkfile(const char *name);

void fs_x11(void);
int x11_display(void);
void x11_start(int argc, char **argv);
void x11_start_xpra(int argc, char **argv);
void x11_start_xephyr(int argc, char **argv);
void x11_start(int argc, char **argv) __attribute__((noreturn));
void x11_start_xpra(int argc, char **argv) __attribute__((noreturn));
void x11_start_xephyr(int argc, char **argv) __attribute__((noreturn));
void x11_block(void);
void x11_start_xvfb(int argc, char **argv);
void x11_start_xvfb(int argc, char **argv) __attribute__((noreturn));
void x11_xorg(void);

// ls.c
Expand All @@ -733,7 +732,7 @@ enum {
SANDBOX_FS_PUT,
SANDBOX_FS_MAX // this should always be the last entry
};
void sandboxfs(int op, pid_t pid, const char *path1, const char *path2);
void sandboxfs(int op, pid_t pid, const char *path1, const char *path2) __attribute__((noreturn));

// checkcfg.c
#define DEFAULT_ARP_PROBES 2
Expand Down Expand Up @@ -839,7 +838,7 @@ void build_appimage_cmdline(char **command_line, char **window_title, int argc,
// run sbox
int sbox_run(unsigned filter, int num, ...);
int sbox_run_v(unsigned filter, char * const arg[]);
void sbox_exec_v(unsigned filter, char * const arg[]);
void sbox_exec_v(unsigned filter, char * const arg[]) __attribute__((noreturn));

// run_files.c
void delete_run_files(pid_t pid);
Expand Down
2 changes: 1 addition & 1 deletion src/firejail/join.c
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ void join(pid_t pid, int argc, char **argv, int index) {

start_application(0, NULL);

// it will never get here!!!
__builtin_unreachable();
}
EUID_USER();

Expand Down
3 changes: 1 addition & 2 deletions src/firejail/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1159,8 +1159,7 @@ int main(int argc, char **argv, char **envp) {

// start the program directly without sandboxing
run_no_sandbox(argc, argv);
// it will never get here!
assert(0);
__builtin_unreachable();
}
}
EUID_ASSERT();
Expand Down
2 changes: 1 addition & 1 deletion src/firejail/protocol.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ void protocol_print_filter(pid_t pid) {
exit(0);
#else
fwarning("--protocol not supported on this platform\n");
return;
exit(1);
#endif
}

Expand Down
2 changes: 1 addition & 1 deletion src/firejail/sbox.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
#define O_PATH 010000000
#endif

static int sbox_do_exec_v(unsigned filtermask, char * const arg[]) {
static int __attribute__((noreturn)) sbox_do_exec_v(unsigned filtermask, char * const arg[]) {
// build a new, clean environment
int env_index = 0;
char *new_environment[256] = { NULL };
Expand Down
4 changes: 2 additions & 2 deletions src/firejail/x11.c
Original file line number Diff line number Diff line change
Expand Up @@ -682,7 +682,7 @@ static char * get_title_arg_str() {
}


void x11_start_xpra_old(int argc, char **argv, int display, char *display_str) {
static void __attribute__((noreturn)) x11_start_xpra_old(int argc, char **argv, int display, char *display_str) {
EUID_ASSERT();
int i;
struct stat s;
Expand Down Expand Up @@ -921,7 +921,7 @@ void x11_start_xpra_old(int argc, char **argv, int display, char *display_str) {
}


void x11_start_xpra_new(int argc, char **argv, char *display_str) {
static void __attribute__((noreturn)) x11_start_xpra_new(int argc, char **argv, char *display_str) {
EUID_ASSERT();
int i;
pid_t server = 0;
Expand Down
6 changes: 3 additions & 3 deletions src/firemon/firemon.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ void firemon_sleep(int st);


// procevent.c
void procevent(pid_t pid);
void procevent(pid_t pid) __attribute__((noreturn));

// usage.c
void usage(void);

// top.c
void top(void);
void top(void) __attribute__((noreturn));

// list.c
void list(void);
Expand Down Expand Up @@ -82,7 +82,7 @@ void cgroup(pid_t pid, int print_procs);
void tree(pid_t pid);

// netstats.c
void netstats(void);
void netstats(void) __attribute__((noreturn));

// x11.c
void x11(pid_t pid, int print_procs);
Expand Down
13 changes: 5 additions & 8 deletions src/firemon/procevent.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ static int procevent_netlink_setup(void) {
}


static int procevent_monitor(const int sock, pid_t mypid) {
static void __attribute__((noreturn)) procevent_monitor(const int sock, pid_t mypid) {
ssize_t len;
struct nlmsghdr *nlmsghdr;

Expand All @@ -246,8 +246,7 @@ static int procevent_monitor(const int sock, pid_t mypid) {

int rv = select(max, &readfds, NULL, NULL, &tv);
if (rv == -1) {
fprintf(stderr, "recv: %s\n", strerror(errno));
return -1;
errExit("recv");
}

// timeout
Expand All @@ -259,7 +258,7 @@ static int procevent_monitor(const int sock, pid_t mypid) {


if ((len = recv(sock, buf, sizeof(buf), 0)) == 0)
return 0;
exit(0);
if (len == -1) {
if (errno == EINTR)
continue;
Expand All @@ -271,7 +270,7 @@ static int procevent_monitor(const int sock, pid_t mypid) {
}
else {
fprintf(stderr,"Error: rx socket recv call, errno %d, %s\n", errno, strerror(errno));
return -1;
exit(1);
}
}

Expand Down Expand Up @@ -497,7 +496,7 @@ static int procevent_monitor(const int sock, pid_t mypid) {
exit(0);
}
}
return 0;
__builtin_unreachable();
}

void procevent(pid_t pid) {
Expand All @@ -515,6 +514,4 @@ void procevent(pid_t pid) {
}

procevent_monitor(sock, pid); // it will never return from here
assert(0);
close(sock); // quiet static analyzers
}
2 changes: 1 addition & 1 deletion src/include/syscall.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void filter_add_blacklist_override(int fd, int syscall, int arg, void *ptrarg, b
// errno.c
void errno_print(void);
int errno_find_name(const char *name);
char *errno_find_nr(int nr);
const char *errno_find_nr(int nr);

// syscall.c
void syscall_print(void);
Expand Down
2 changes: 1 addition & 1 deletion src/lib/errno.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ int errno_find_name(const char *name) {
return -1;
}

char *errno_find_nr(int nr) {
const char *errno_find_nr(int nr) {
int i;
int elems = sizeof(errnolist) / sizeof(errnolist[0]);
for (i = 0; i < elems; i++) {
Expand Down

0 comments on commit ce1b254

Please sign in to comment.