Skip to content

Commit 3976348

Browse files
committed
9p/net: xen: fix false positive printf format overflow warning
Use the constant to make the compiler happy about this warning: net/9p/trans_xen.c: In function ‘xen_9pfs_front_changed’: net/9p/trans_xen.c:444:39: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 8 [-Wformat-overflow=] 444 | sprintf(str, "ring-ref%d", i); | ^~ In function ‘xen_9pfs_front_init’, inlined from ‘xen_9pfs_front_changed’ at net/9p/trans_xen.c:516:8, inlined from ‘xen_9pfs_front_changed’ at net/9p/trans_xen.c:504:13: net/9p/trans_xen.c:444:30: note: directive argument in the range [-2147483644, 2147483646] 444 | sprintf(str, "ring-ref%d", i); | ^~~~~~~~~~~~ net/9p/trans_xen.c:444:17: note: ‘sprintf’ output between 10 and 20 bytes into a destination of size 16 444 | sprintf(str, "ring-ref%d", i); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/9p/trans_xen.c: In function ‘xen_9pfs_front_changed’: net/9p/trans_xen.c:450:45: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 2 [-Wformat-overflow=] 450 | sprintf(str, "event-channel-%d", i); | ^~ In function ‘xen_9pfs_front_init’, inlined from ‘xen_9pfs_front_changed’ at net/9p/trans_xen.c:516:8, inlined from ‘xen_9pfs_front_changed’ at net/9p/trans_xen.c:504:13: net/9p/trans_xen.c:450:30: note: directive argument in the range [-2147483644, 2147483646] 450 | sprintf(str, "event-channel-%d", i); | ^~~~~~~~~~~~~~~~~~ net/9p/trans_xen.c:450:17: note: ‘sprintf’ output between 16 and 26 bytes into a destination of size 16 450 | sprintf(str, "event-channel-%d", i); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ There is no change in logic: there only are a constant number of rings, and there also already is a BUILD_BUG_ON that checks if that constant goes over 9 as anything bigger would no longer fit the event-channel-%d destination size. In theory having that size as part of the struct means it could be modified by another thread and makes the compiler lose track of possible values for 'i' here, using the constant directly here makes it work. Signed-off-by: Dominique Martinet <[email protected]> Message-ID: <[email protected]> Reviewed-by: Christian Schoenebeck <[email protected]>
1 parent 9b5c628 commit 3976348

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

net/9p/trans_xen.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ struct xen_9pfs_front_priv {
5454
char *tag;
5555
struct p9_client *client;
5656

57-
int num_rings;
5857
struct xen_9pfs_dataring *rings;
5958
};
6059

@@ -131,7 +130,7 @@ static int p9_xen_request(struct p9_client *client, struct p9_req_t *p9_req)
131130
if (list_entry_is_head(priv, &xen_9pfs_devs, list))
132131
return -EINVAL;
133132

134-
num = p9_req->tc.tag % priv->num_rings;
133+
num = p9_req->tc.tag % XEN_9PFS_NUM_RINGS;
135134
ring = &priv->rings[num];
136135

137136
again:
@@ -279,7 +278,7 @@ static void xen_9pfs_front_free(struct xen_9pfs_front_priv *priv)
279278
list_del(&priv->list);
280279
write_unlock(&xen_9pfs_lock);
281280

282-
for (i = 0; i < priv->num_rings; i++) {
281+
for (i = 0; i < XEN_9PFS_NUM_RINGS; i++) {
283282
struct xen_9pfs_dataring *ring = &priv->rings[i];
284283

285284
cancel_work_sync(&ring->work);
@@ -408,15 +407,14 @@ static int xen_9pfs_front_init(struct xenbus_device *dev)
408407
if (p9_xen_trans.maxsize > XEN_FLEX_RING_SIZE(max_ring_order))
409408
p9_xen_trans.maxsize = XEN_FLEX_RING_SIZE(max_ring_order) / 2;
410409

411-
priv->num_rings = XEN_9PFS_NUM_RINGS;
412-
priv->rings = kcalloc(priv->num_rings, sizeof(*priv->rings),
410+
priv->rings = kcalloc(XEN_9PFS_NUM_RINGS, sizeof(*priv->rings),
413411
GFP_KERNEL);
414412
if (!priv->rings) {
415413
kfree(priv);
416414
return -ENOMEM;
417415
}
418416

419-
for (i = 0; i < priv->num_rings; i++) {
417+
for (i = 0; i < XEN_9PFS_NUM_RINGS; i++) {
420418
priv->rings[i].priv = priv;
421419
ret = xen_9pfs_front_alloc_dataring(dev, &priv->rings[i],
422420
max_ring_order);
@@ -434,10 +432,11 @@ static int xen_9pfs_front_init(struct xenbus_device *dev)
434432
if (ret)
435433
goto error_xenbus;
436434
ret = xenbus_printf(xbt, dev->nodename, "num-rings", "%u",
437-
priv->num_rings);
435+
XEN_9PFS_NUM_RINGS);
438436
if (ret)
439437
goto error_xenbus;
440-
for (i = 0; i < priv->num_rings; i++) {
438+
439+
for (i = 0; i < XEN_9PFS_NUM_RINGS; i++) {
441440
char str[16];
442441

443442
BUILD_BUG_ON(XEN_9PFS_NUM_RINGS > 9);

0 commit comments

Comments
 (0)