* [Cocci] cocci: missed strlcpy->strscpy conversion? [not found] <58a84d03b714f71d231f9cac04af09a6b97c6f04.camel@perches.com> @ 2020-12-31 20:13 ` Joe Perches 2020-12-31 20:27 ` Julia Lawall 0 siblings, 1 reply; 6+ messages in thread From: Joe Perches @ 2020-12-31 20:13 UTC (permalink / raw) To: Julia Lawall; +Cc: cocci On Thu, 2020-12-31 at 11:04 -0800, Joe Perches wrote: > strlcpy is deprecated. see: Documentation/process/deprecated.rst > > Change the calls that do not use the strlcpy return value to the > preferred strscpy. > > Done with cocci script: > > @@ > expression e1, e2, e3; > @@ > > - strlcpy( > + strscpy( > e1, e2, e3); > > This cocci script leaves the instances where the return value is > used unchanged. Hey Julia. After using the cocci script above on a test treewide conversion, there were a few instances with no return use that were not converted. Any idea why these were not converted? I don't see a pattern. The .h files may be because those are the only uses in .h files in the kernel but drivers/block/rnbd/rnbd-clt.c I don't understand at all. drivers/block/rnbd/rnbd-clt.c: strlcpy(sess->sessname, sessname, sizeof(sess->sessname)); drivers/input/serio/i8042-x86ia64io.h: strlcpy(dst, "PNP:", dst_size); drivers/input/serio/i8042-x86ia64io.h: strlcpy(i8042_pnp_kbd_name, did->id, sizeof(i8042_pnp_kbd_name)); drivers/input/serio/i8042-x86ia64io.h: strlcpy(i8042_pnp_aux_name, did->id, sizeof(i8042_pnp_aux_name)); drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h: strlcpy(buf, bp->acquire_resp.pfdev_info.fw_ver, buf_len); $ git grep -3 strlcpy drivers/block/rnbd/rnbd-clt.c drivers/input/serio/i8042-x86ia64io.h drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h drivers/block/rnbd/rnbd-clt.c- sess = kzalloc_node(sizeof(*sess), GFP_KERNEL, NUMA_NO_NODE); drivers/block/rnbd/rnbd-clt.c- if (!sess) drivers/block/rnbd/rnbd-clt.c- return ERR_PTR(-ENOMEM); drivers/block/rnbd/rnbd-clt.c: strlcpy(sess->sessname, sessname, sizeof(sess->sessname)); drivers/block/rnbd/rnbd-clt.c- atomic_set(&sess->busy, 0); drivers/block/rnbd/rnbd-clt.c- mutex_init(&sess->lock); drivers/block/rnbd/rnbd-clt.c- INIT_LIST_HEAD(&sess->devs_list); -- drivers/input/serio/i8042-x86ia64io.h- drivers/input/serio/i8042-x86ia64io.h-static void i8042_pnp_id_to_string(struct pnp_id *id, char *dst, int dst_size) drivers/input/serio/i8042-x86ia64io.h-{ drivers/input/serio/i8042-x86ia64io.h: strlcpy(dst, "PNP:", dst_size); drivers/input/serio/i8042-x86ia64io.h- drivers/input/serio/i8042-x86ia64io.h- while (id) { drivers/input/serio/i8042-x86ia64io.h- strlcat(dst, " ", dst_size); -- drivers/input/serio/i8042-x86ia64io.h- if (pnp_irq_valid(dev,0)) drivers/input/serio/i8042-x86ia64io.h- i8042_pnp_kbd_irq = pnp_irq(dev, 0); drivers/input/serio/i8042-x86ia64io.h- drivers/input/serio/i8042-x86ia64io.h: strlcpy(i8042_pnp_kbd_name, did->id, sizeof(i8042_pnp_kbd_name)); drivers/input/serio/i8042-x86ia64io.h- if (strlen(pnp_dev_name(dev))) { drivers/input/serio/i8042-x86ia64io.h- strlcat(i8042_pnp_kbd_name, ":", sizeof(i8042_pnp_kbd_name)); drivers/input/serio/i8042-x86ia64io.h- strlcat(i8042_pnp_kbd_name, pnp_dev_name(dev), sizeof(i8042_pnp_kbd_name)); -- drivers/input/serio/i8042-x86ia64io.h- if (pnp_irq_valid(dev, 0)) drivers/input/serio/i8042-x86ia64io.h- i8042_pnp_aux_irq = pnp_irq(dev, 0); drivers/input/serio/i8042-x86ia64io.h- drivers/input/serio/i8042-x86ia64io.h: strlcpy(i8042_pnp_aux_name, did->id, sizeof(i8042_pnp_aux_name)); drivers/input/serio/i8042-x86ia64io.h- if (strlen(pnp_dev_name(dev))) { drivers/input/serio/i8042-x86ia64io.h- strlcat(i8042_pnp_aux_name, ":", sizeof(i8042_pnp_aux_name)); drivers/input/serio/i8042-x86ia64io.h- strlcat(i8042_pnp_aux_name, pnp_dev_name(dev), sizeof(i8042_pnp_aux_name)); -- drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h-static inline void bnx2x_vf_fill_fw_str(struct bnx2x *bp, char *buf, drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h- size_t buf_len) drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h-{ drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h: strlcpy(buf, bp->acquire_resp.pfdev_info.fw_ver, buf_len); drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h-} drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h- drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h-static inline int bnx2x_vf_ustorm_prods_offset(struct bnx2x *bp, _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Cocci] cocci: missed strlcpy->strscpy conversion? 2020-12-31 20:13 ` [Cocci] cocci: missed strlcpy->strscpy conversion? Joe Perches @ 2020-12-31 20:27 ` Julia Lawall 2020-12-31 20:41 ` Joe Perches 0 siblings, 1 reply; 6+ messages in thread From: Julia Lawall @ 2020-12-31 20:27 UTC (permalink / raw) To: Joe Perches; +Cc: cocci On Thu, 31 Dec 2020, Joe Perches wrote: > On Thu, 2020-12-31 at 11:04 -0800, Joe Perches wrote: > > strlcpy is deprecated. see: Documentation/process/deprecated.rst > > > > Change the calls that do not use the strlcpy return value to the > > preferred strscpy. > > > > Done with cocci script: > > > > @@ > > expression e1, e2, e3; > > @@ > > > > - strlcpy( > > + strscpy( > > e1, e2, e3); > > > > This cocci script leaves the instances where the return value is > > used unchanged. > > Hey Julia. > > After using the cocci script above on a test treewide conversion, > there were a few instances with no return use that were not converted. > > Any idea why these were not converted? > I don't see a pattern. For a semantic patch like this, where you don't case about type information and the change is very local, you can use the options: --no-includes --include-headers Then the .c files and the .h files will be treated one by one. The --no-includes options prevents the .h files from being included into the .c files, which could causetheir code to get transformed at each inclusion. The --include-headers option causes the .h files to be considered. > > The .h files may be because those are the only uses in .h files in the kernel > but drivers/block/rnbd/rnbd-clt.c I don't understand at all. The parse is not happy about the for_each_possible_cpu. It seems that the heuristic for detecting that as a loop expects that the body of the loop will have braces. You can see this with the --parse-c option, ie spatch --parse-c drivers/block/rnbd/rnbd-clt.c The offending line will have BAD in front of it. julia > drivers/block/rnbd/rnbd-clt.c: strlcpy(sess->sessname, sessname, sizeof(sess->sessname)); > drivers/input/serio/i8042-x86ia64io.h: strlcpy(dst, "PNP:", dst_size); > drivers/input/serio/i8042-x86ia64io.h: strlcpy(i8042_pnp_kbd_name, did->id, sizeof(i8042_pnp_kbd_name)); > drivers/input/serio/i8042-x86ia64io.h: strlcpy(i8042_pnp_aux_name, did->id, sizeof(i8042_pnp_aux_name)); > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h: strlcpy(buf, bp->acquire_resp.pfdev_info.fw_ver, buf_len); > > $ git grep -3 strlcpy drivers/block/rnbd/rnbd-clt.c drivers/input/serio/i8042-x86ia64io.h drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h > drivers/block/rnbd/rnbd-clt.c- sess = kzalloc_node(sizeof(*sess), GFP_KERNEL, NUMA_NO_NODE); > drivers/block/rnbd/rnbd-clt.c- if (!sess) > drivers/block/rnbd/rnbd-clt.c- return ERR_PTR(-ENOMEM); > drivers/block/rnbd/rnbd-clt.c: strlcpy(sess->sessname, sessname, sizeof(sess->sessname)); > drivers/block/rnbd/rnbd-clt.c- atomic_set(&sess->busy, 0); > drivers/block/rnbd/rnbd-clt.c- mutex_init(&sess->lock); > drivers/block/rnbd/rnbd-clt.c- INIT_LIST_HEAD(&sess->devs_list); > -- > drivers/input/serio/i8042-x86ia64io.h- > drivers/input/serio/i8042-x86ia64io.h-static void i8042_pnp_id_to_string(struct pnp_id *id, char *dst, int dst_size) > drivers/input/serio/i8042-x86ia64io.h-{ > drivers/input/serio/i8042-x86ia64io.h: strlcpy(dst, "PNP:", dst_size); > drivers/input/serio/i8042-x86ia64io.h- > drivers/input/serio/i8042-x86ia64io.h- while (id) { > drivers/input/serio/i8042-x86ia64io.h- strlcat(dst, " ", dst_size); > -- > drivers/input/serio/i8042-x86ia64io.h- if (pnp_irq_valid(dev,0)) > drivers/input/serio/i8042-x86ia64io.h- i8042_pnp_kbd_irq = pnp_irq(dev, 0); > drivers/input/serio/i8042-x86ia64io.h- > drivers/input/serio/i8042-x86ia64io.h: strlcpy(i8042_pnp_kbd_name, did->id, sizeof(i8042_pnp_kbd_name)); > drivers/input/serio/i8042-x86ia64io.h- if (strlen(pnp_dev_name(dev))) { > drivers/input/serio/i8042-x86ia64io.h- strlcat(i8042_pnp_kbd_name, ":", sizeof(i8042_pnp_kbd_name)); > drivers/input/serio/i8042-x86ia64io.h- strlcat(i8042_pnp_kbd_name, pnp_dev_name(dev), sizeof(i8042_pnp_kbd_name)); > -- > drivers/input/serio/i8042-x86ia64io.h- if (pnp_irq_valid(dev, 0)) > drivers/input/serio/i8042-x86ia64io.h- i8042_pnp_aux_irq = pnp_irq(dev, 0); > drivers/input/serio/i8042-x86ia64io.h- > drivers/input/serio/i8042-x86ia64io.h: strlcpy(i8042_pnp_aux_name, did->id, sizeof(i8042_pnp_aux_name)); > drivers/input/serio/i8042-x86ia64io.h- if (strlen(pnp_dev_name(dev))) { > drivers/input/serio/i8042-x86ia64io.h- strlcat(i8042_pnp_aux_name, ":", sizeof(i8042_pnp_aux_name)); > drivers/input/serio/i8042-x86ia64io.h- strlcat(i8042_pnp_aux_name, pnp_dev_name(dev), sizeof(i8042_pnp_aux_name)); > -- > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h-static inline void bnx2x_vf_fill_fw_str(struct bnx2x *bp, char *buf, > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h- size_t buf_len) > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h-{ > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h: strlcpy(buf, bp->acquire_resp.pfdev_info.fw_ver, buf_len); > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h-} > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h- > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h-static inline int bnx2x_vf_ustorm_prods_offset(struct bnx2x *bp, > > _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Cocci] cocci: missed strlcpy->strscpy conversion? 2020-12-31 20:27 ` Julia Lawall @ 2020-12-31 20:41 ` Joe Perches 2020-12-31 20:49 ` Julia Lawall 2020-12-31 21:21 ` Julia Lawall 0 siblings, 2 replies; 6+ messages in thread From: Joe Perches @ 2020-12-31 20:41 UTC (permalink / raw) To: Julia Lawall; +Cc: cocci On Thu, 2020-12-31 at 21:27 +0100, Julia Lawall wrote: > On Thu, 31 Dec 2020, Joe Perches wrote: > > On Thu, 2020-12-31 at 11:04 -0800, Joe Perches wrote: > > > strlcpy is deprecated. see: Documentation/process/deprecated.rst > > > > > > Change the calls that do not use the strlcpy return value to the > > > preferred strscpy. > > > > > > Done with cocci script: > > > > > > @@ > > > expression e1, e2, e3; > > > @@ > > > > > > - strlcpy( > > > + strscpy( > > > e1, e2, e3); > > > > > > This cocci script leaves the instances where the return value is > > > used unchanged. > > > > Hey Julia. > > > > After using the cocci script above on a test treewide conversion, > > there were a few instances with no return use that were not converted. > > > > Any idea why these were not converted? [] > The parse is not happy about the for_each_possible_cpu. It seems that the > heuristic for detecting that as a loop expects that the body of the loop > will have braces. You can see this with the --parse-c option, ie > > spatch --parse-c drivers/block/rnbd/rnbd-clt.c > > The offending line will have BAD in front of it. Thanks. Do you consider the for_each heuristic a defect? (I'm not sure I do) I hope it's time for you to stop working today... cheers and happy new year, Joe _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Cocci] cocci: missed strlcpy->strscpy conversion? 2020-12-31 20:41 ` Joe Perches @ 2020-12-31 20:49 ` Julia Lawall 2020-12-31 21:21 ` Julia Lawall 1 sibling, 0 replies; 6+ messages in thread From: Julia Lawall @ 2020-12-31 20:49 UTC (permalink / raw) To: Joe Perches; +Cc: cocci On Thu, 31 Dec 2020, Joe Perches wrote: > On Thu, 2020-12-31 at 21:27 +0100, Julia Lawall wrote: > > On Thu, 31 Dec 2020, Joe Perches wrote: > > > On Thu, 2020-12-31 at 11:04 -0800, Joe Perches wrote: > > > > strlcpy is deprecated. see: Documentation/process/deprecated.rst > > > > > > > > Change the calls that do not use the strlcpy return value to the > > > > preferred strscpy. > > > > > > > > Done with cocci script: > > > > > > > > @@ > > > > expression e1, e2, e3; > > > > @@ > > > > > > > > - strlcpy( > > > > + strscpy( > > > > e1, e2, e3); > > > > > > > > This cocci script leaves the instances where the return value is > > > > used unchanged. > > > > > > Hey Julia. > > > > > > After using the cocci script above on a test treewide conversion, > > > there were a few instances with no return use that were not converted. > > > > > > Any idea why these were not converted? > [] > > The parse is not happy about the for_each_possible_cpu. It seems that the > > heuristic for detecting that as a loop expects that the body of the loop > > will have braces. You can see this with the --parse-c option, ie > > > > spatch --parse-c drivers/block/rnbd/rnbd-clt.c > > > > The offending line will have BAD in front of it. > > Thanks. > > Do you consider the for_each heuristic a defect? (I'm not sure I do) It could be improved. I was wondering if the indentation was not correct. If there was a space in the line with the for_each, then the two lines would be equally indented, which would certainly confuse the heuristics. But that is not the case; the indentation is fine. And the file contains a previous for_each_possible_cpu that has braces, so it should have taken note of that and detected that the next one should also be a loop. > > I hope it's time for you to stop working today... > > cheers and happy new year, Joe Thanks! Happy new year :) julia _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Cocci] cocci: missed strlcpy->strscpy conversion? 2020-12-31 20:41 ` Joe Perches 2020-12-31 20:49 ` Julia Lawall @ 2020-12-31 21:21 ` Julia Lawall 2020-12-31 21:23 ` Joe Perches 1 sibling, 1 reply; 6+ messages in thread From: Julia Lawall @ 2020-12-31 21:21 UTC (permalink / raw) To: Joe Perches; +Cc: cocci On Thu, 31 Dec 2020, Joe Perches wrote: > On Thu, 2020-12-31 at 21:27 +0100, Julia Lawall wrote: > > On Thu, 31 Dec 2020, Joe Perches wrote: > > > On Thu, 2020-12-31 at 11:04 -0800, Joe Perches wrote: > > > > strlcpy is deprecated. see: Documentation/process/deprecated.rst > > > > > > > > Change the calls that do not use the strlcpy return value to the > > > > preferred strscpy. > > > > > > > > Done with cocci script: > > > > > > > > @@ > > > > expression e1, e2, e3; > > > > @@ > > > > > > > > - strlcpy( > > > > + strscpy( > > > > e1, e2, e3); > > > > > > > > This cocci script leaves the instances where the return value is > > > > used unchanged. > > > > > > Hey Julia. > > > > > > After using the cocci script above on a test treewide conversion, > > > there were a few instances with no return use that were not converted. > > > > > > Any idea why these were not converted? > [] > > The parse is not happy about the for_each_possible_cpu. It seems that the > > heuristic for detecting that as a loop expects that the body of the loop > > will have braces. You can see this with the --parse-c option, ie > > > > spatch --parse-c drivers/block/rnbd/rnbd-clt.c > > > > The offending line will have BAD in front of it. > > Thanks. > > Do you consider the for_each heuristic a defect? (I'm not sure I do) It seems that the problem is not really the for_each, but the * in front of a "function call" on the left side of an assignment. Without the *, everything is fine. So it is indeed probably not worth doing anything about. julia _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Cocci] cocci: missed strlcpy->strscpy conversion? 2020-12-31 21:21 ` Julia Lawall @ 2020-12-31 21:23 ` Joe Perches 0 siblings, 0 replies; 6+ messages in thread From: Joe Perches @ 2020-12-31 21:23 UTC (permalink / raw) To: Julia Lawall; +Cc: cocci On Thu, 2020-12-31 at 22:21 +0100, Julia Lawall wrote: > It seems that the problem is not really the for_each, but the * in front > of a "function call" on the left side of an assignment. Without the *, > everything is fine. So it is indeed probably not worth doing anything > about. Maybe a combination because if braces are added to the for_each, the conversion also works. _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-12-31 23:53 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <58a84d03b714f71d231f9cac04af09a6b97c6f04.camel@perches.com> 2020-12-31 20:13 ` [Cocci] cocci: missed strlcpy->strscpy conversion? Joe Perches 2020-12-31 20:27 ` Julia Lawall 2020-12-31 20:41 ` Joe Perches 2020-12-31 20:49 ` Julia Lawall 2020-12-31 21:21 ` Julia Lawall 2020-12-31 21:23 ` Joe Perches
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).