projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: report an error if unix socket address is too long
[lttng-tools.git]
/
src
/
common
/
unix.c
diff --git
a/src/common/unix.c
b/src/common/unix.c
index e294936cade132a4771f9c65a8feb49cc5e26615..11c30781ba02ea5fa81f84e7f7400e15bb4436ce 100644
(file)
--- a/
src/common/unix.c
+++ b/
src/common/unix.c
@@
-41,6
+41,14
@@
int lttcomm_connect_unix_sock(const char *pathname)
struct sockaddr_un s_un;
int fd, ret, closeret;
struct sockaddr_un s_un;
int fd, ret, closeret;
+ if (strlen(pathname) >= sizeof(s_un.sun_path)) {
+ ERR("unix socket address (\"%s\") is longer than the platform's limit (%zu > %zu).",
+ pathname, strlen(pathname) + 1,
+ sizeof(s_un.sun_path));
+ ret = -ENAMETOOLONG;
+ goto error;
+ }
+
fd = socket(PF_UNIX, SOCK_STREAM, 0);
if (fd < 0) {
PERROR("socket");
fd = socket(PF_UNIX, SOCK_STREAM, 0);
if (fd < 0) {
PERROR("socket");
@@
-82,7
+90,7
@@
int lttcomm_accept_unix_sock(int sock)
{
int new_fd;
struct sockaddr_un s_un;
{
int new_fd;
struct sockaddr_un s_un;
- socklen_t len =
0
;
+ socklen_t len =
sizeof(s_un)
;
/* Blocking call */
new_fd = accept(sock, (struct sockaddr *) &s_un, &len);
/* Blocking call */
new_fd = accept(sock, (struct sockaddr *) &s_un, &len);
@@
-111,9
+119,17
@@
LTTNG_HIDDEN
int lttcomm_create_unix_sock(const char *pathname)
{
struct sockaddr_un s_un;
int lttcomm_create_unix_sock(const char *pathname)
{
struct sockaddr_un s_un;
- int fd;
+ int fd
= -1
;
int ret = -1;
int ret = -1;
+ if (strlen(pathname) >= sizeof(s_un.sun_path)) {
+ ERR("unix socket address (\"%s\") is longer than the platform's limit (%zu > %zu).",
+ pathname, strlen(pathname) + 1,
+ sizeof(s_un.sun_path));
+ ret = -ENAMETOOLONG;
+ goto error;
+ }
+
/* Create server socket */
if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
PERROR("socket");
/* Create server socket */
if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
PERROR("socket");
@@
-525,7
+541,7
@@
ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len,
}
memcpy(creds, CMSG_DATA(cmptr), sizeof_cred);
}
memcpy(creds, CMSG_DATA(cmptr), sizeof_cred);
-#elif (defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__sun__))
+#elif (defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__sun__)
|| defined(__APPLE__)
)
{
int peer_ret;
{
int peer_ret;
@@
-558,7
+574,7
@@
int lttcomm_setsockopt_creds_unix_sock(int sock)
}
return ret;
}
}
return ret;
}
-#elif (defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__sun__))
+#elif (defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__sun__)
|| defined(__APPLE__)
)
LTTNG_HIDDEN
int lttcomm_setsockopt_creds_unix_sock(int sock)
{
LTTNG_HIDDEN
int lttcomm_setsockopt_creds_unix_sock(int sock)
{
This page took
0.023393 seconds
and
4
git commands to generate.