]> granicus.if.org Git - strace/commitdiff
Consistently handle 2nd and 3rd arguments of [gs]etsockopt as unsigned
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 1 Apr 2016 01:03:20 +0000 (01:03 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 1 Apr 2016 01:03:20 +0000 (01:03 +0000)
The second (level) and third (optname) arguments of getsockopt and
setsockopt syscalls are enums, so treat them consistently as enums:
use "unsigned int" type to avoid potential sign extension issues.

* net.c (print_sockopt_fd_level_name, print_getsockopt,
print_setsockopt): Change type of "level" and "name" arguments
from "int" to "unsigned int".

net.c

diff --git a/net.c b/net.c
index d79181cef4f991c3c15a279ff7725e3e7fd0844e..b6c2f085f70cfc6311892683e24fe3d40bed3b05 100644 (file)
--- a/net.c
+++ b/net.c
@@ -1151,7 +1151,8 @@ SYS_FUNC(socketpair)
 #include "xlat/socktcpoptions.h"
 
 static void
-print_sockopt_fd_level_name(struct tcb *tcp, int fd, int level, int name, bool is_getsockopt)
+print_sockopt_fd_level_name(struct tcb *tcp, int fd, unsigned int level,
+                           unsigned int name, bool is_getsockopt)
 {
        printfd(tcp, fd);
        tprints(", ");
@@ -1269,7 +1270,8 @@ print_icmp_filter(struct tcb *tcp, long addr, int len)
 #endif /* ICMP_FILTER */
 
 static void
-print_getsockopt(struct tcb *tcp, int level, int name, long addr, int len)
+print_getsockopt(struct tcb *tcp, unsigned int level, unsigned int name,
+                long addr, int len)
 {
        if (addr && verbose(tcp))
        switch (level) {
@@ -1465,7 +1467,8 @@ print_packet_mreq(struct tcb *tcp, long addr, int len)
 #endif /* PACKET_ADD_MEMBERSHIP */
 
 static void
-print_setsockopt(struct tcb *tcp, int level, int name, long addr, int len)
+print_setsockopt(struct tcb *tcp, unsigned int level, unsigned int name,
+                long addr, int len)
 {
        if (addr && verbose(tcp))
        switch (level) {