]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
selinux-util: add safety size check before doing strdupa() 24429/head
authorLennart Poettering <lennart@poettering.net>
Wed, 24 Aug 2022 14:57:20 +0000 (16:57 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 24 Aug 2022 15:32:43 +0000 (17:32 +0200)
src/shared/selinux-util.c

index 336d7f5c968bc1a3c68b8a793a156336b854b00c..f7d8353b49c182ab8d28439f75e7b2403dc520a9 100644 (file)
@@ -598,6 +598,7 @@ int mac_selinux_bind(int fd, const struct sockaddr *addr, socklen_t addrlen) {
         _cleanup_freecon_ char *fcon = NULL;
         const struct sockaddr_un *un;
         bool context_changed = false;
+        size_t sz;
         char *path;
         int r;
 
@@ -621,8 +622,10 @@ int mac_selinux_bind(int fd, const struct sockaddr *addr, socklen_t addrlen) {
         if (un->sun_path[0] == 0)
                 goto skipped;
 
-        path = strndupa_safe(un->sun_path,
-                             addrlen - offsetof(struct sockaddr_un, sun_path));
+        sz = addrlen - offsetof(struct sockaddr_un, sun_path);
+        if (sz > PATH_MAX)
+                goto skipped;
+        path = strndupa_safe(un->sun_path, sz);
 
         /* Check for policy reload so 'label_hnd' is kept up-to-date by callbacks */
         mac_selinux_maybe_reload();