[PATCH 6/9] networking: Replace ptrdiff_t with intptr_t in fcntl()

Steve Capper steve.capper at arm.com
Mon Apr 4 10:49:59 UTC 2022


From: Vincenzo Frascino <vincenzo.frascino at arm.com>

The use of ptrdiff_t can trigger a warning because a successive cast to
void * can generate a pointer that cannot be dereferenced.

Replace it with intptr_t that does not require provenance since being an
integer is always valid.

Signed-off-by: Vincenzo Frascino <vincenzo.frascino at arm.com>
Reviewed-by: Steve Capper <steve.capper at arm.com>
Signed-off-by: Steve Capper <steve.capper at arm.com>
---
 networking/isrv.c | 6 +++---
 networking/tftp.c | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/networking/isrv.c b/networking/isrv.c
index 0e3f10f9a..38466374a 100644
--- a/networking/isrv.c
+++ b/networking/isrv.c
@@ -177,9 +177,9 @@ static void handle_accept(isrv_state_t *state, int fd)
 	int n, newfd;
 
 	/* suppress gcc warning "cast from ptr to int of different size" */
-	fcntl(fd, F_SETFL, (int)(ptrdiff_t)(PARAM_TBL[0]) | O_NONBLOCK);
+	fcntl(fd, F_SETFL, (int)(intptr_t)(PARAM_TBL[0]) | O_NONBLOCK);
 	newfd = accept(fd, NULL, 0);
-	fcntl(fd, F_SETFL, (int)(ptrdiff_t)(PARAM_TBL[0]));
+	fcntl(fd, F_SETFL, (int)(intptr_t)(PARAM_TBL[0]));
 	if (newfd < 0) {
 		if (errno == EAGAIN) return;
 		/* Most probably someone gave us wrong fd type
@@ -285,7 +285,7 @@ void isrv_run(
 	isrv_want_rd(state, listen_fd);
 	/* remember flags to make blocking<->nonblocking switch faster */
 	/* (suppress gcc warning "cast from ptr to int of different size") */
-	PARAM_TBL[0] = (void*)(ptrdiff_t)(fcntl(listen_fd, F_GETFL));
+	PARAM_TBL[0] = (void*)(intptr_t)(fcntl(listen_fd, F_GETFL));
 
 	while (1) {
 		struct timeval tv;
diff --git a/networking/tftp.c b/networking/tftp.c
index f5b4367ca..fa4f8ca63 100644
--- a/networking/tftp.c
+++ b/networking/tftp.c
@@ -586,7 +586,7 @@ static int tftp_protocol(
 		case 1:
 			if (!our_lsa) {
 				/* tftp (not tftpd!) receiving 1st packet */
-				our_lsa = ((void*)(ptrdiff_t)-1); /* not NULL */
+				our_lsa = ((void*)(intptr_t)-1); /* not NULL */
 				len = recvfrom(socket_fd, rbuf, io_bufsize, 0,
 						&peer_lsa->u.sa, &peer_lsa->len);
 				/* Our first dgram went to port 69
-- 
2.35.1



More information about the busybox mailing list