[libc-commits] [libc] [libc] Small recvfrom fixes (yaml, unpoison) (PR #111020)

Michael Jones via libc-commits libc-commits at lists.llvm.org
Thu Oct 3 11:35:10 PDT 2024


https://github.com/michaelrj-google updated https://github.com/llvm/llvm-project/pull/111020

>From 252ed0dfea10a368ad10a797664ef9b7506a5dba Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Thu, 3 Oct 2024 09:45:39 -0700
Subject: [PATCH 1/3] [libc] Small recvfrom fixes (yaml, unpoison)

Forgot to update the newhdrgen yaml (old headergen is fine) and forgot
to unpoison addrlen. This patch fixes those.
---
 libc/newhdrgen/yaml/sys/socket.yaml    | 2 +-
 libc/src/sys/socket/linux/recvfrom.cpp | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/libc/newhdrgen/yaml/sys/socket.yaml b/libc/newhdrgen/yaml/sys/socket.yaml
index accb4b14099e82..45602d4b3bff03 100644
--- a/libc/newhdrgen/yaml/sys/socket.yaml
+++ b/libc/newhdrgen/yaml/sys/socket.yaml
@@ -62,7 +62,7 @@ functions:
       - type: size_t
       - type: int
       - type: const struct sockaddr *
-      - type: socklen_t
+      - type: socklen_t *
   - name: recvmsg
     standards:
       - POSIX
diff --git a/libc/src/sys/socket/linux/recvfrom.cpp b/libc/src/sys/socket/linux/recvfrom.cpp
index fdcaceee8ad293..791005529acdf2 100644
--- a/libc/src/sys/socket/linux/recvfrom.cpp
+++ b/libc/src/sys/socket/linux/recvfrom.cpp
@@ -45,6 +45,7 @@ LLVM_LIBC_FUNCTION(ssize_t, recvfrom,
   }
 
   MSAN_UNPOISON(buf, ret);
+  MSAN_UNPOISON(addrlen, sizeof(socklen_t));
 
   return ret;
 }

>From c1f9be4549005eb4a0075abc7337a221533cd0b5 Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Thu, 3 Oct 2024 10:37:37 -0700
Subject: [PATCH 2/3] remove incorrect consts

---
 libc/newhdrgen/yaml/sys/socket.yaml    | 8 ++++----
 libc/src/sys/socket/linux/recv.cpp     | 2 +-
 libc/src/sys/socket/linux/recvfrom.cpp | 4 ++--
 libc/src/sys/socket/linux/recvmsg.cpp  | 2 +-
 libc/src/sys/socket/recv.h             | 2 +-
 libc/src/sys/socket/recvfrom.h         | 4 ++--
 libc/src/sys/socket/recvmsg.h          | 2 +-
 7 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/libc/newhdrgen/yaml/sys/socket.yaml b/libc/newhdrgen/yaml/sys/socket.yaml
index 45602d4b3bff03..c76bf5c51aca59 100644
--- a/libc/newhdrgen/yaml/sys/socket.yaml
+++ b/libc/newhdrgen/yaml/sys/socket.yaml
@@ -49,7 +49,7 @@ functions:
     return_type: ssize_t
     arguments:
       - type: int
-      - type: const void *
+      - type: void *
       - type: size_t
       - type: int
   - name: recvfrom
@@ -58,10 +58,10 @@ functions:
     return_type: ssize_t
     arguments:
       - type: int
-      - type: const void*
+      - type: void *
       - type: size_t
       - type: int
-      - type: const struct sockaddr *
+      - type: struct sockaddr *
       - type: socklen_t *
   - name: recvmsg
     standards:
@@ -69,7 +69,7 @@ functions:
     return_type: ssize_t
     arguments:
       - type: int
-      - type: const struct msghdr *
+      - type: struct msghdr *
       - type: int
   - name: send
     standards:
diff --git a/libc/src/sys/socket/linux/recv.cpp b/libc/src/sys/socket/linux/recv.cpp
index a534dffd0f583f..5e9f2d3233fcf3 100644
--- a/libc/src/sys/socket/linux/recv.cpp
+++ b/libc/src/sys/socket/linux/recv.cpp
@@ -22,7 +22,7 @@
 namespace LIBC_NAMESPACE_DECL {
 
 LLVM_LIBC_FUNCTION(ssize_t, recv,
-                   (int sockfd, const void *buf, size_t len, int flags)) {
+                   (int sockfd, void *buf, size_t len, int flags)) {
 #ifdef SYS_recv
   ssize_t ret =
       LIBC_NAMESPACE::syscall_impl<ssize_t>(SYS_recv, sockfd, buf, len, flags);
diff --git a/libc/src/sys/socket/linux/recvfrom.cpp b/libc/src/sys/socket/linux/recvfrom.cpp
index 791005529acdf2..f973a91a960672 100644
--- a/libc/src/sys/socket/linux/recvfrom.cpp
+++ b/libc/src/sys/socket/linux/recvfrom.cpp
@@ -22,8 +22,8 @@
 namespace LIBC_NAMESPACE_DECL {
 
 LLVM_LIBC_FUNCTION(ssize_t, recvfrom,
-                   (int sockfd, const void *buf, size_t len, int flags,
-                    const struct sockaddr *dest_addr, socklen_t *addrlen)) {
+                   (int sockfd, void *buf, size_t len, int flags,
+                    struct sockaddr *dest_addr, socklen_t *addrlen)) {
 #ifdef SYS_recvfrom
   ssize_t ret = LIBC_NAMESPACE::syscall_impl<ssize_t>(
       SYS_recvfrom, sockfd, buf, len, flags, dest_addr, addrlen);
diff --git a/libc/src/sys/socket/linux/recvmsg.cpp b/libc/src/sys/socket/linux/recvmsg.cpp
index 59a99210c1a840..60bbc84877b850 100644
--- a/libc/src/sys/socket/linux/recvmsg.cpp
+++ b/libc/src/sys/socket/linux/recvmsg.cpp
@@ -21,7 +21,7 @@
 namespace LIBC_NAMESPACE_DECL {
 
 LLVM_LIBC_FUNCTION(ssize_t, recvmsg,
-                   (int sockfd, const struct msghdr *msg, int flags)) {
+                   (int sockfd, struct msghdr *msg, int flags)) {
 #ifdef SYS_recvmsg
   ssize_t ret =
       LIBC_NAMESPACE::syscall_impl<ssize_t>(SYS_recvmsg, sockfd, msg, flags);
diff --git a/libc/src/sys/socket/recv.h b/libc/src/sys/socket/recv.h
index 093e8ca9b12304..ea64daa1183feb 100644
--- a/libc/src/sys/socket/recv.h
+++ b/libc/src/sys/socket/recv.h
@@ -14,7 +14,7 @@
 
 namespace LIBC_NAMESPACE_DECL {
 
-ssize_t recv(int sockfd, const void *buf, size_t len, int flags);
+ssize_t recv(int sockfd, void *buf, size_t len, int flags);
 
 } // namespace LIBC_NAMESPACE_DECL
 
diff --git a/libc/src/sys/socket/recvfrom.h b/libc/src/sys/socket/recvfrom.h
index 40e6cabca043b9..d434e93723173d 100644
--- a/libc/src/sys/socket/recvfrom.h
+++ b/libc/src/sys/socket/recvfrom.h
@@ -17,8 +17,8 @@
 
 namespace LIBC_NAMESPACE_DECL {
 
-ssize_t recvfrom(int sockfd, const void *buf, size_t len, int flags,
-                 const struct sockaddr *address, socklen_t *addrlen);
+ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
+                 struct sockaddr *address, socklen_t *addrlen);
 
 } // namespace LIBC_NAMESPACE_DECL
 
diff --git a/libc/src/sys/socket/recvmsg.h b/libc/src/sys/socket/recvmsg.h
index a506fb0ae68fa0..6230136f439b12 100644
--- a/libc/src/sys/socket/recvmsg.h
+++ b/libc/src/sys/socket/recvmsg.h
@@ -15,7 +15,7 @@
 
 namespace LIBC_NAMESPACE_DECL {
 
-ssize_t recvmsg(int sockfd, const struct msghdr *msg, int flags);
+ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
 
 } // namespace LIBC_NAMESPACE_DECL
 

>From 5b2c86deff3bb982d10c3e81120dc163e7295f25 Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Thu, 3 Oct 2024 11:34:54 -0700
Subject: [PATCH 3/3] add restrict

---
 libc/newhdrgen/yaml/sys/socket.yaml    | 4 ++--
 libc/src/sys/socket/linux/recvfrom.cpp | 3 ++-
 libc/src/sys/socket/recvfrom.h         | 3 ++-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/libc/newhdrgen/yaml/sys/socket.yaml b/libc/newhdrgen/yaml/sys/socket.yaml
index c76bf5c51aca59..47d835fa5f4a19 100644
--- a/libc/newhdrgen/yaml/sys/socket.yaml
+++ b/libc/newhdrgen/yaml/sys/socket.yaml
@@ -61,8 +61,8 @@ functions:
       - type: void *
       - type: size_t
       - type: int
-      - type: struct sockaddr *
-      - type: socklen_t *
+      - type: struct sockaddr *__restrict
+      - type: socklen_t *__restrict
   - name: recvmsg
     standards:
       - POSIX
diff --git a/libc/src/sys/socket/linux/recvfrom.cpp b/libc/src/sys/socket/linux/recvfrom.cpp
index f973a91a960672..a0f8278cd5deb4 100644
--- a/libc/src/sys/socket/linux/recvfrom.cpp
+++ b/libc/src/sys/socket/linux/recvfrom.cpp
@@ -23,7 +23,8 @@ namespace LIBC_NAMESPACE_DECL {
 
 LLVM_LIBC_FUNCTION(ssize_t, recvfrom,
                    (int sockfd, void *buf, size_t len, int flags,
-                    struct sockaddr *dest_addr, socklen_t *addrlen)) {
+                    struct sockaddr *__restrict dest_addr,
+                    socklen_t *__restrict addrlen)) {
 #ifdef SYS_recvfrom
   ssize_t ret = LIBC_NAMESPACE::syscall_impl<ssize_t>(
       SYS_recvfrom, sockfd, buf, len, flags, dest_addr, addrlen);
diff --git a/libc/src/sys/socket/recvfrom.h b/libc/src/sys/socket/recvfrom.h
index d434e93723173d..14869802e72563 100644
--- a/libc/src/sys/socket/recvfrom.h
+++ b/libc/src/sys/socket/recvfrom.h
@@ -18,7 +18,8 @@
 namespace LIBC_NAMESPACE_DECL {
 
 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
-                 struct sockaddr *address, socklen_t *addrlen);
+                 struct sockaddr *__restrict address,
+                 socklen_t *__restrict addrlen);
 
 } // namespace LIBC_NAMESPACE_DECL
 



More information about the libc-commits mailing list