From 8535a207b7223325607890513e0fe5c06104658c Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 6 Apr 2026 21:42:00 -0300 Subject: [PATCH] socket: fix invalid unix paths being used --- kernel-src/include/kernel/abi.h | 6 ++++-- kernel-src/include/kernel/sock.h | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/kernel-src/include/kernel/abi.h b/kernel-src/include/kernel/abi.h index 2f4a8cab..ea263595 100644 --- a/kernel-src/include/kernel/abi.h +++ b/kernel-src/include/kernel/abi.h @@ -127,9 +127,11 @@ typedef struct { typedef unsigned socklen_t; +#define ABISOCKADDR_UN_MAX 108 + typedef struct { unsigned short type; - char addr[14]; + char addr[ABISOCKADDR_UN_MAX]; } abisockaddr_t; typedef struct { @@ -140,7 +142,7 @@ typedef struct { typedef struct { uint16_t sun_family; - char sun_path[108]; + char sun_path[ABISOCKADDR_UN_MAX]; } __attribute__((packed)) unaddr_t; typedef struct { diff --git a/kernel-src/include/kernel/sock.h b/kernel-src/include/kernel/sock.h index 62a1ba66..77ecc891 100644 --- a/kernel-src/include/kernel/sock.h +++ b/kernel-src/include/kernel/sock.h @@ -151,7 +151,11 @@ static inline int sock_convertaddress(sockaddr_t *sockaddr, abisockaddr_t *abiso break; case AF_LOCAL: unaddr_t *unaddr = (unaddr_t *)abisockaddr; - strcpy(sockaddr->path, unaddr->sun_path); + size_t length = strnlen(unaddr->sun_path, ABISOCKADDR_UN_MAX); + if (length == ABISOCKADDR_UN_MAX) + return EINVAL; + + memcpy(sockaddr->path, unaddr->sun_path, length + 1); break; default: return EINVAL;