diff mbox series

[net,v3] drivers/net/bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set()

Message ID CAEkJfYOnsLLiCrtgOpq2Upr+_W0dViYVHU8YdjJOi-mxD8H9oQ@mail.gmail.com (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series [net,v3] drivers/net/bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set() | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for net
netdev/apply fail Patch does not apply to net-0

Commit Message

Sam Sun April 16, 2024, 12:09 p.m. UTC
In function bond_option_arp_ip_targets_set(), if newval->string is an
empty string, newval->string+1 will point to the byte after the
string, causing an out-of-bound read.

BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
 print_address_description mm/kasan/report.c:364 [inline]
 print_report+0xc1/0x5e0 mm/kasan/report.c:475
 kasan_report+0xbe/0xf0 mm/kasan/report.c:588
 strlen+0x7d/0xa0 lib/string.c:418
 __fortify_strlen include/linux/fortify-string.h:210 [inline]
 in4_pton+0xa3/0x3f0 net/core/utils.c:130
 bond_option_arp_ip_targets_set+0xc2/0x910
drivers/net/bonding/bond_options.c:1201
 __bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
 __bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
 bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
 bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
 dev_attr_store+0x54/0x80 drivers/base/core.c:2366
 sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
 kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
 call_write_iter include/linux/fs.h:2020 [inline]
 new_sync_write fs/read_write.c:491 [inline]
 vfs_write+0x96a/0xd80 fs/read_write.c:584
 ksys_write+0x122/0x250 fs/read_write.c:637
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x63/0x6b
---[ end trace ]---

Fix it by adding a check of string length before using it.

v2
According to Jay and Hangbin's opinion, remove target address in
netdev_err message since target is not initialized in error path and
will not provide useful information.

v3
According to Hangbin's opinion, change Fixes tag from 4fb0ef585eb2
("bonding: convert arp_ip_target to use the new option API") to
f9de11a16594 ("bonding: add ip checks when store ip target").

Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
Signed-off-by: Yue Sun <samsun1006219@gmail.com>
---
 drivers/net/bonding/bond_options.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

         if (newval->string[0] == '+')

Comments

Simon Horman April 16, 2024, 2:24 p.m. UTC | #1
On Tue, Apr 16, 2024 at 08:09:44PM +0800, Sam Sun wrote:
> In function bond_option_arp_ip_targets_set(), if newval->string is an
> empty string, newval->string+1 will point to the byte after the
> string, causing an out-of-bound read.
> 
> BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
> Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
> CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
> Call Trace:
>  <TASK>
>  __dump_stack lib/dump_stack.c:88 [inline]
>  dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
>  print_address_description mm/kasan/report.c:364 [inline]
>  print_report+0xc1/0x5e0 mm/kasan/report.c:475
>  kasan_report+0xbe/0xf0 mm/kasan/report.c:588
>  strlen+0x7d/0xa0 lib/string.c:418
>  __fortify_strlen include/linux/fortify-string.h:210 [inline]
>  in4_pton+0xa3/0x3f0 net/core/utils.c:130
>  bond_option_arp_ip_targets_set+0xc2/0x910
> drivers/net/bonding/bond_options.c:1201
>  __bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
>  __bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
>  bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
>  bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
>  dev_attr_store+0x54/0x80 drivers/base/core.c:2366
>  sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
>  kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
>  call_write_iter include/linux/fs.h:2020 [inline]
>  new_sync_write fs/read_write.c:491 [inline]
>  vfs_write+0x96a/0xd80 fs/read_write.c:584
>  ksys_write+0x122/0x250 fs/read_write.c:637
>  do_syscall_x64 arch/x86/entry/common.c:52 [inline]
>  do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
>  entry_SYSCALL_64_after_hwframe+0x63/0x6b
> ---[ end trace ]---
> 
> Fix it by adding a check of string length before using it.
> 
> v2
> According to Jay and Hangbin's opinion, remove target address in
> netdev_err message since target is not initialized in error path and
> will not provide useful information.
> 
> v3
> According to Hangbin's opinion, change Fixes tag from 4fb0ef585eb2
> ("bonding: convert arp_ip_target to use the new option API") to
> f9de11a16594 ("bonding: add ip checks when store ip target").
> 
> Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
> Signed-off-by: Yue Sun <samsun1006219@gmail.com>
> ---

Hi Sam Sun,

Some comments about the formatting of this submission:

* The list of chances, (v2, v3, ...) should be below rather than
  above the scissors ("---"), so it is not included when the patch
  is applied.

* Looking at git history, the patch prefix should probably be "bonding:"

	Subject: [PATCH net v3] bonding: ...

* The diff seems to be a bit mangled, f.e. tabs seem to
  have been translated into spaces. So it does not apply.
  Which breaks automated testing. And for this reason
  I am asking you to repost this patch.

  git send-email, and b4, are two tools that can typically be used
  to send patches in a way that this doesn't occur.

--- 
pw-bot: changes-requested
Sam Sun April 17, 2024, 6:34 a.m. UTC | #2
On Tue, Apr 16, 2024 at 10:24 PM Simon Horman <horms@kernel.org> wrote:
>
> On Tue, Apr 16, 2024 at 08:09:44PM +0800, Sam Sun wrote:
> > In function bond_option_arp_ip_targets_set(), if newval->string is an
> > empty string, newval->string+1 will point to the byte after the
> > string, causing an out-of-bound read.
> >
> > BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
> > Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
> > CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
> > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
> > Call Trace:
> >  <TASK>
> >  __dump_stack lib/dump_stack.c:88 [inline]
> >  dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
> >  print_address_description mm/kasan/report.c:364 [inline]
> >  print_report+0xc1/0x5e0 mm/kasan/report.c:475
> >  kasan_report+0xbe/0xf0 mm/kasan/report.c:588
> >  strlen+0x7d/0xa0 lib/string.c:418
> >  __fortify_strlen include/linux/fortify-string.h:210 [inline]
> >  in4_pton+0xa3/0x3f0 net/core/utils.c:130
> >  bond_option_arp_ip_targets_set+0xc2/0x910
> > drivers/net/bonding/bond_options.c:1201
> >  __bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
> >  __bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
> >  bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
> >  bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
> >  dev_attr_store+0x54/0x80 drivers/base/core.c:2366
> >  sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
> >  kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
> >  call_write_iter include/linux/fs.h:2020 [inline]
> >  new_sync_write fs/read_write.c:491 [inline]
> >  vfs_write+0x96a/0xd80 fs/read_write.c:584
> >  ksys_write+0x122/0x250 fs/read_write.c:637
> >  do_syscall_x64 arch/x86/entry/common.c:52 [inline]
> >  do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
> >  entry_SYSCALL_64_after_hwframe+0x63/0x6b
> > ---[ end trace ]---
> >
> > Fix it by adding a check of string length before using it.
> >
> > v2
> > According to Jay and Hangbin's opinion, remove target address in
> > netdev_err message since target is not initialized in error path and
> > will not provide useful information.
> >
> > v3
> > According to Hangbin's opinion, change Fixes tag from 4fb0ef585eb2
> > ("bonding: convert arp_ip_target to use the new option API") to
> > f9de11a16594 ("bonding: add ip checks when store ip target").
> >
> > Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
> > Signed-off-by: Yue Sun <samsun1006219@gmail.com>
> > ---
>
> Hi Sam Sun,
>
> Some comments about the formatting of this submission:
>
> * The list of chances, (v2, v3, ...) should be below rather than
>   above the scissors ("---"), so it is not included when the patch
>   is applied.
>
> * Looking at git history, the patch prefix should probably be "bonding:"
>
>         Subject: [PATCH net v3] bonding: ...
>
> * The diff seems to be a bit mangled, f.e. tabs seem to
>   have been translated into spaces. So it does not apply.
>   Which breaks automated testing. And for this reason
>   I am asking you to repost this patch.
>
>   git send-email, and b4, are two tools that can typically be used
>   to send patches in a way that this doesn't occur.
>
> ---
> pw-bot: changes-requested

I sincerely apologize for not using git send-email. I tried to set up
the environment but it did not work. For some reason, I needed to use
a proxy to connect with my gmail account, but the proxy service
provider banned using their proxy to send email through smtp. Maybe I
need to rent a VPS and set up a working environment there, but it
would take time and I don't know for sure whether the VPS provider
would allow me to send email through smtp either.

Could you or anyone please help me submit this patch? Sorry for
causing this trouble.

Best Regards,
Yue
Hangbin Liu April 17, 2024, 1:31 p.m. UTC | #3
On Wed, Apr 17, 2024 at 02:34:49PM +0800, Sam Sun wrote:
> On Tue, Apr 16, 2024 at 10:24 PM Simon Horman <horms@kernel.org> wrote:
> >
> > On Tue, Apr 16, 2024 at 08:09:44PM +0800, Sam Sun wrote:
> > > In function bond_option_arp_ip_targets_set(), if newval->string is an
> > > empty string, newval->string+1 will point to the byte after the
> > > string, causing an out-of-bound read.
> > >
> > > BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
> > > Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
> > > CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
> > > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
> > > Call Trace:
> > >  <TASK>
> > >  __dump_stack lib/dump_stack.c:88 [inline]
> > >  dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
> > >  print_address_description mm/kasan/report.c:364 [inline]
> > >  print_report+0xc1/0x5e0 mm/kasan/report.c:475
> > >  kasan_report+0xbe/0xf0 mm/kasan/report.c:588
> > >  strlen+0x7d/0xa0 lib/string.c:418
> > >  __fortify_strlen include/linux/fortify-string.h:210 [inline]
> > >  in4_pton+0xa3/0x3f0 net/core/utils.c:130
> > >  bond_option_arp_ip_targets_set+0xc2/0x910
> > > drivers/net/bonding/bond_options.c:1201
> > >  __bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
> > >  __bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
> > >  bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
> > >  bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
> > >  dev_attr_store+0x54/0x80 drivers/base/core.c:2366
> > >  sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
> > >  kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
> > >  call_write_iter include/linux/fs.h:2020 [inline]
> > >  new_sync_write fs/read_write.c:491 [inline]
> > >  vfs_write+0x96a/0xd80 fs/read_write.c:584
> > >  ksys_write+0x122/0x250 fs/read_write.c:637
> > >  do_syscall_x64 arch/x86/entry/common.c:52 [inline]
> > >  do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
> > >  entry_SYSCALL_64_after_hwframe+0x63/0x6b
> > > ---[ end trace ]---
> > >
> > > Fix it by adding a check of string length before using it.
> > >
> > > v2
> > > According to Jay and Hangbin's opinion, remove target address in
> > > netdev_err message since target is not initialized in error path and
> > > will not provide useful information.
> > >
> > > v3
> > > According to Hangbin's opinion, change Fixes tag from 4fb0ef585eb2
> > > ("bonding: convert arp_ip_target to use the new option API") to
> > > f9de11a16594 ("bonding: add ip checks when store ip target").
> > >
> > > Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
> > > Signed-off-by: Yue Sun <samsun1006219@gmail.com>
> > > ---
> >
> > Hi Sam Sun,
> >
> > Some comments about the formatting of this submission:
> >
> > * The list of chances, (v2, v3, ...) should be below rather than
> >   above the scissors ("---"), so it is not included when the patch
> >   is applied.
> >
> > * Looking at git history, the patch prefix should probably be "bonding:"
> >
> >         Subject: [PATCH net v3] bonding: ...
> >
> > * The diff seems to be a bit mangled, f.e. tabs seem to
> >   have been translated into spaces. So it does not apply.
> >   Which breaks automated testing. And for this reason
> >   I am asking you to repost this patch.
> >
> >   git send-email, and b4, are two tools that can typically be used
> >   to send patches in a way that this doesn't occur.
> >
> > ---
> > pw-bot: changes-requested
> 
> I sincerely apologize for not using git send-email. I tried to set up
> the environment but it did not work. For some reason, I needed to use
> a proxy to connect with my gmail account, but the proxy service
> provider banned using their proxy to send email through smtp. Maybe I
> need to rent a VPS and set up a working environment there, but it
> would take time and I don't know for sure whether the VPS provider
> would allow me to send email through smtp either.
> 
> Could you or anyone please help me submit this patch? Sorry for
> causing this trouble.

Maybe you can try use another proxy service. If it not works, I can
help you post the patch.

Thanks
Hangbin
Sam Sun April 17, 2024, 1:47 p.m. UTC | #4
On Wed, Apr 17, 2024 at 9:31 PM Hangbin Liu <liuhangbin@gmail.com> wrote:
>
> On Wed, Apr 17, 2024 at 02:34:49PM +0800, Sam Sun wrote:
> > On Tue, Apr 16, 2024 at 10:24 PM Simon Horman <horms@kernel.org> wrote:
> > >
> > > On Tue, Apr 16, 2024 at 08:09:44PM +0800, Sam Sun wrote:
> > > > In function bond_option_arp_ip_targets_set(), if newval->string is an
> > > > empty string, newval->string+1 will point to the byte after the
> > > > string, causing an out-of-bound read.
> > > >
> > > > BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
> > > > Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
> > > > CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
> > > > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
> > > > Call Trace:
> > > >  <TASK>
> > > >  __dump_stack lib/dump_stack.c:88 [inline]
> > > >  dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
> > > >  print_address_description mm/kasan/report.c:364 [inline]
> > > >  print_report+0xc1/0x5e0 mm/kasan/report.c:475
> > > >  kasan_report+0xbe/0xf0 mm/kasan/report.c:588
> > > >  strlen+0x7d/0xa0 lib/string.c:418
> > > >  __fortify_strlen include/linux/fortify-string.h:210 [inline]
> > > >  in4_pton+0xa3/0x3f0 net/core/utils.c:130
> > > >  bond_option_arp_ip_targets_set+0xc2/0x910
> > > > drivers/net/bonding/bond_options.c:1201
> > > >  __bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
> > > >  __bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
> > > >  bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
> > > >  bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
> > > >  dev_attr_store+0x54/0x80 drivers/base/core.c:2366
> > > >  sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
> > > >  kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
> > > >  call_write_iter include/linux/fs.h:2020 [inline]
> > > >  new_sync_write fs/read_write.c:491 [inline]
> > > >  vfs_write+0x96a/0xd80 fs/read_write.c:584
> > > >  ksys_write+0x122/0x250 fs/read_write.c:637
> > > >  do_syscall_x64 arch/x86/entry/common.c:52 [inline]
> > > >  do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
> > > >  entry_SYSCALL_64_after_hwframe+0x63/0x6b
> > > > ---[ end trace ]---
> > > >
> > > > Fix it by adding a check of string length before using it.
> > > >
> > > > v2
> > > > According to Jay and Hangbin's opinion, remove target address in
> > > > netdev_err message since target is not initialized in error path and
> > > > will not provide useful information.
> > > >
> > > > v3
> > > > According to Hangbin's opinion, change Fixes tag from 4fb0ef585eb2
> > > > ("bonding: convert arp_ip_target to use the new option API") to
> > > > f9de11a16594 ("bonding: add ip checks when store ip target").
> > > >
> > > > Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
> > > > Signed-off-by: Yue Sun <samsun1006219@gmail.com>
> > > > ---
> > >
> > > Hi Sam Sun,
> > >
> > > Some comments about the formatting of this submission:
> > >
> > > * The list of chances, (v2, v3, ...) should be below rather than
> > >   above the scissors ("---"), so it is not included when the patch
> > >   is applied.
> > >
> > > * Looking at git history, the patch prefix should probably be "bonding:"
> > >
> > >         Subject: [PATCH net v3] bonding: ...
> > >
> > > * The diff seems to be a bit mangled, f.e. tabs seem to
> > >   have been translated into spaces. So it does not apply.
> > >   Which breaks automated testing. And for this reason
> > >   I am asking you to repost this patch.
> > >
> > >   git send-email, and b4, are two tools that can typically be used
> > >   to send patches in a way that this doesn't occur.
> > >
> > > ---
> > > pw-bot: changes-requested
> >
> > I sincerely apologize for not using git send-email. I tried to set up
> > the environment but it did not work. For some reason, I needed to use
> > a proxy to connect with my gmail account, but the proxy service
> > provider banned using their proxy to send email through smtp. Maybe I
> > need to rent a VPS and set up a working environment there, but it
> > would take time and I don't know for sure whether the VPS provider
> > would allow me to send email through smtp either.
> >
> > Could you or anyone please help me submit this patch? Sorry for
> > causing this trouble.
>
> Maybe you can try use another proxy service. If it not works, I can
> help you post the patch.
>
> Thanks
> Hangbin

I will try to set up git send-email environment as soon as I can, but
I am afraid not for this time. I am sorry that I have to bother you
this time. Appreciate for your help!

Thanks,
Yue
Simon Horman April 18, 2024, 8:10 p.m. UTC | #5
On Wed, Apr 17, 2024 at 02:34:49PM +0800, Sam Sun wrote:
> On Tue, Apr 16, 2024 at 10:24 PM Simon Horman <horms@kernel.org> wrote:
> >
> > On Tue, Apr 16, 2024 at 08:09:44PM +0800, Sam Sun wrote:
> > > In function bond_option_arp_ip_targets_set(), if newval->string is an
> > > empty string, newval->string+1 will point to the byte after the
> > > string, causing an out-of-bound read.
> > >
> > > BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
> > > Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
> > > CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
> > > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
> > > Call Trace:
> > >  <TASK>
> > >  __dump_stack lib/dump_stack.c:88 [inline]
> > >  dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
> > >  print_address_description mm/kasan/report.c:364 [inline]
> > >  print_report+0xc1/0x5e0 mm/kasan/report.c:475
> > >  kasan_report+0xbe/0xf0 mm/kasan/report.c:588
> > >  strlen+0x7d/0xa0 lib/string.c:418
> > >  __fortify_strlen include/linux/fortify-string.h:210 [inline]
> > >  in4_pton+0xa3/0x3f0 net/core/utils.c:130
> > >  bond_option_arp_ip_targets_set+0xc2/0x910
> > > drivers/net/bonding/bond_options.c:1201
> > >  __bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
> > >  __bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
> > >  bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
> > >  bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
> > >  dev_attr_store+0x54/0x80 drivers/base/core.c:2366
> > >  sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
> > >  kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
> > >  call_write_iter include/linux/fs.h:2020 [inline]
> > >  new_sync_write fs/read_write.c:491 [inline]
> > >  vfs_write+0x96a/0xd80 fs/read_write.c:584
> > >  ksys_write+0x122/0x250 fs/read_write.c:637
> > >  do_syscall_x64 arch/x86/entry/common.c:52 [inline]
> > >  do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
> > >  entry_SYSCALL_64_after_hwframe+0x63/0x6b
> > > ---[ end trace ]---
> > >
> > > Fix it by adding a check of string length before using it.
> > >
> > > v2
> > > According to Jay and Hangbin's opinion, remove target address in
> > > netdev_err message since target is not initialized in error path and
> > > will not provide useful information.
> > >
> > > v3
> > > According to Hangbin's opinion, change Fixes tag from 4fb0ef585eb2
> > > ("bonding: convert arp_ip_target to use the new option API") to
> > > f9de11a16594 ("bonding: add ip checks when store ip target").
> > >
> > > Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
> > > Signed-off-by: Yue Sun <samsun1006219@gmail.com>
> > > ---
> >
> > Hi Sam Sun,
> >
> > Some comments about the formatting of this submission:
> >
> > * The list of chances, (v2, v3, ...) should be below rather than
> >   above the scissors ("---"), so it is not included when the patch
> >   is applied.
> >
> > * Looking at git history, the patch prefix should probably be "bonding:"
> >
> >         Subject: [PATCH net v3] bonding: ...
> >
> > * The diff seems to be a bit mangled, f.e. tabs seem to
> >   have been translated into spaces. So it does not apply.
> >   Which breaks automated testing. And for this reason
> >   I am asking you to repost this patch.
> >
> >   git send-email, and b4, are two tools that can typically be used
> >   to send patches in a way that this doesn't occur.
> >
> > ---
> > pw-bot: changes-requested
> 
> I sincerely apologize for not using git send-email. I tried to set up
> the environment but it did not work. For some reason, I needed to use
> a proxy to connect with my gmail account, but the proxy service
> provider banned using their proxy to send email through smtp. Maybe I
> need to rent a VPS and set up a working environment there, but it
> would take time and I don't know for sure whether the VPS provider
> would allow me to send email through smtp either.
> 
> Could you or anyone please help me submit this patch? Sorry for
> causing this trouble.

Sure, happy to help.

I'll look at doing this tomororw (Friday),
unless someone else does so beforehand.
Simon Horman April 19, 2024, 11:11 a.m. UTC | #6
On Thu, Apr 18, 2024 at 09:10:23PM +0100, Simon Horman wrote:
> On Wed, Apr 17, 2024 at 02:34:49PM +0800, Sam Sun wrote:
> > On Tue, Apr 16, 2024 at 10:24 PM Simon Horman <horms@kernel.org> wrote:
> > >
> > > On Tue, Apr 16, 2024 at 08:09:44PM +0800, Sam Sun wrote:
> > > > In function bond_option_arp_ip_targets_set(), if newval->string is an
> > > > empty string, newval->string+1 will point to the byte after the
> > > > string, causing an out-of-bound read.
> > > >
> > > > BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
> > > > Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
> > > > CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
> > > > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
> > > > Call Trace:
> > > >  <TASK>
> > > >  __dump_stack lib/dump_stack.c:88 [inline]
> > > >  dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
> > > >  print_address_description mm/kasan/report.c:364 [inline]
> > > >  print_report+0xc1/0x5e0 mm/kasan/report.c:475
> > > >  kasan_report+0xbe/0xf0 mm/kasan/report.c:588
> > > >  strlen+0x7d/0xa0 lib/string.c:418
> > > >  __fortify_strlen include/linux/fortify-string.h:210 [inline]
> > > >  in4_pton+0xa3/0x3f0 net/core/utils.c:130
> > > >  bond_option_arp_ip_targets_set+0xc2/0x910
> > > > drivers/net/bonding/bond_options.c:1201
> > > >  __bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
> > > >  __bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
> > > >  bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
> > > >  bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
> > > >  dev_attr_store+0x54/0x80 drivers/base/core.c:2366
> > > >  sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
> > > >  kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
> > > >  call_write_iter include/linux/fs.h:2020 [inline]
> > > >  new_sync_write fs/read_write.c:491 [inline]
> > > >  vfs_write+0x96a/0xd80 fs/read_write.c:584
> > > >  ksys_write+0x122/0x250 fs/read_write.c:637
> > > >  do_syscall_x64 arch/x86/entry/common.c:52 [inline]
> > > >  do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
> > > >  entry_SYSCALL_64_after_hwframe+0x63/0x6b
> > > > ---[ end trace ]---
> > > >
> > > > Fix it by adding a check of string length before using it.
> > > >
> > > > v2
> > > > According to Jay and Hangbin's opinion, remove target address in
> > > > netdev_err message since target is not initialized in error path and
> > > > will not provide useful information.
> > > >
> > > > v3
> > > > According to Hangbin's opinion, change Fixes tag from 4fb0ef585eb2
> > > > ("bonding: convert arp_ip_target to use the new option API") to
> > > > f9de11a16594 ("bonding: add ip checks when store ip target").
> > > >
> > > > Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
> > > > Signed-off-by: Yue Sun <samsun1006219@gmail.com>
> > > > ---
> > >
> > > Hi Sam Sun,
> > >
> > > Some comments about the formatting of this submission:
> > >
> > > * The list of chances, (v2, v3, ...) should be below rather than
> > >   above the scissors ("---"), so it is not included when the patch
> > >   is applied.
> > >
> > > * Looking at git history, the patch prefix should probably be "bonding:"
> > >
> > >         Subject: [PATCH net v3] bonding: ...
> > >
> > > * The diff seems to be a bit mangled, f.e. tabs seem to
> > >   have been translated into spaces. So it does not apply.
> > >   Which breaks automated testing. And for this reason
> > >   I am asking you to repost this patch.
> > >
> > >   git send-email, and b4, are two tools that can typically be used
> > >   to send patches in a way that this doesn't occur.
> > >
> > > ---
> > > pw-bot: changes-requested
> > 
> > I sincerely apologize for not using git send-email. I tried to set up
> > the environment but it did not work. For some reason, I needed to use
> > a proxy to connect with my gmail account, but the proxy service
> > provider banned using their proxy to send email through smtp. Maybe I
> > need to rent a VPS and set up a working environment there, but it
> > would take time and I don't know for sure whether the VPS provider
> > would allow me to send email through smtp either.
> > 
> > Could you or anyone please help me submit this patch? Sorry for
> > causing this trouble.
> 
> Sure, happy to help.
> 
> I'll look at doing this tomororw (Friday),
> unless someone else does so beforehand.

I have posted the patch as v4.
The only changes were:
* Correct whitespace problems,
  which I assume were added in transit as discussed above.
* Update the patch prefix to 'bonding:' as described above
* Move the changelog to below the scissors, as described above

- [PATCH net v4] bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set()
  https://lore.kernel.org/netdev/20240419-bond-oob-v4-1-69dd1a66db20@kernel.org/
diff mbox series

Patch

diff --git a/drivers/net/bonding/bond_options.c
b/drivers/net/bonding/bond_options.c
index 4cdbc7e084f4..8f3fb91897b3 100644
--- a/drivers/net/bonding/bond_options.c
+++ b/drivers/net/bonding/bond_options.c
@@ -1214,9 +1214,9 @@  static int bond_option_arp_ip_targets_set(struct
bonding *bond,
     __be32 target;

     if (newval->string) {
-        if (!in4_pton(newval->string+1, -1, (u8 *)&target, -1, NULL)) {
-            netdev_err(bond->dev, "invalid ARP target %pI4 specified\n",
-                   &target);
+        if (!(strlen(newval->string)) ||
+            !in4_pton(newval->string + 1, -1, (u8 *)&target, -1, NULL)) {
+            netdev_err(bond->dev, "invalid ARP target I4 specified\n");
             return ret;
         }