Skip to content

Commit f56fc44

Browse files
committed
utils: add bounds checking for Unix domain socket paths
Replace unsafe strcpy() with proper length validation and memcpy() to prevent buffer overflow when copying socket paths to sockaddr_un.sun_path. This prevents potential buffer overflow vulnerabilities when handling long socket paths. Signed-off-by: Jindrich Novy <[email protected]>
1 parent db78e42 commit f56fc44

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/libcrun/utils.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,11 @@ open_unix_domain_client_socket (const char *path, int dgram, libcrun_error_t *er
11021102
path = name_buf;
11031103
}
11041104

1105-
strcpy (addr.sun_path, path);
1105+
size_t path_len = strlen (path);
1106+
if (path_len >= sizeof (addr.sun_path))
1107+
return crun_make_error (err, ENAMETOOLONG, "socket path too long: `%s`", path);
1108+
1109+
memcpy (addr.sun_path, path, path_len + 1);
11061110
addr.sun_family = AF_UNIX;
11071111
ret = connect (fd, (struct sockaddr *) &addr, sizeof (addr));
11081112
if (UNLIKELY (ret < 0))
@@ -1129,7 +1133,12 @@ open_unix_domain_socket (const char *path, int dgram, libcrun_error_t *err)
11291133
get_proc_self_fd_path (name_buf, fd);
11301134
path = name_buf;
11311135
}
1132-
strcpy (addr.sun_path, path);
1136+
1137+
size_t path_len = strlen (path);
1138+
if (path_len >= sizeof (addr.sun_path))
1139+
return crun_make_error (err, ENAMETOOLONG, "socket path too long: `%s`", path);
1140+
1141+
memcpy (addr.sun_path, path, path_len + 1);
11331142
addr.sun_family = AF_UNIX;
11341143
ret = bind (fd, (struct sockaddr *) &addr, sizeof (addr));
11351144
if (UNLIKELY (ret < 0))

0 commit comments

Comments
 (0)