KASAN: use-after-free Read in nf_hook_slow

11 views
Skip to first unread message

syzbot

unread,
Dec 8, 2020, 3:37:12 PM12/8/20
to syzkaller...@googlegroups.com
Hello,

syzbot found the following issue on:

HEAD commit: 47cbf4cc Linux 4.14.211
git tree: linux-4.14.y
console output: https://syzkaller.appspot.com/x/log.txt?x=1568f703500000
kernel config: https://syzkaller.appspot.com/x/.config?x=fdd708417c3f7d5b
dashboard link: https://syzkaller.appspot.com/bug?extid=663e49fa871bf5aad3fd
compiler: gcc (GCC) 10.1.0-syz 20200507

Unfortunately, I don't have any reproducer for this issue yet.

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+663e49...@syzkaller.appspotmail.com

IPv6: ADDRCONF(NETDEV_UP): batadv_slave_1: link is not ready
batman_adv: batadv0: Interface activated: batadv_slave_1
IPv6: ADDRCONF(NETDEV_CHANGE): batadv_slave_1: link becomes ready
IPv6: ADDRCONF(NETDEV_CHANGE): veth1_to_batadv: link becomes ready
==================================================================
BUG: KASAN: use-after-free in nf_hook_slow+0x197/0x1a0 net/netfilter/core.c:466
Read of size 2 at addr ffff8880af416d80 by task syz-executor.3/9459

CPU: 0 PID: 9459 Comm: syz-executor.3 Not tainted 4.14.211-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
<IRQ>
__dump_stack lib/dump_stack.c:17 [inline]
dump_stack+0x1b2/0x283 lib/dump_stack.c:58
print_address_description.cold+0x54/0x1d3 mm/kasan/report.c:252
kasan_report_error.cold+0x8a/0x194 mm/kasan/report.c:351
overlayfs: unrecognized mount option "./bus" or missing value
kasan_report mm/kasan/report.c:409 [inline]
__asan_report_load2_noabort+0x68/0x70 mm/kasan/report.c:428
nf_hook_slow+0x197/0x1a0 net/netfilter/core.c:466
nf_hook include/linux/netfilter.h:205 [inline]
NF_HOOK include/linux/netfilter.h:248 [inline]
mld_sendpack+0x884/0xea0 net/ipv6/mcast.c:1660
mld_send_cr net/ipv6/mcast.c:1956 [inline]
mld_ifc_timer_expire+0x57c/0xcd0 net/ipv6/mcast.c:2455
call_timer_fn+0x14a/0x650 kernel/time/timer.c:1280
expire_timers+0x232/0x4d0 kernel/time/timer.c:1319
__run_timers kernel/time/timer.c:1637 [inline]
run_timer_softirq+0x1d5/0x5a0 kernel/time/timer.c:1650
__do_softirq+0x254/0xa1d kernel/softirq.c:288
invoke_softirq kernel/softirq.c:368 [inline]
irq_exit+0x193/0x240 kernel/softirq.c:409
exiting_irq arch/x86/include/asm/apic.h:648 [inline]
smp_apic_timer_interrupt+0x141/0x5e0 arch/x86/kernel/apic/apic.c:1102
apic_timer_interrupt+0x93/0xa0 arch/x86/entry/entry_64.S:793
</IRQ>
RIP: 0010:arch_local_irq_restore arch/x86/include/asm/paravirt.h:779 [inline]
RIP: 0010:__raw_spin_unlock_irqrestore include/linux/spinlock_api_smp.h:160 [inline]
RIP: 0010:_raw_spin_unlock_irqrestore+0xa3/0xe0 kernel/locking/spinlock.c:192
RSP: 0018:ffff88806e14f770 EFLAGS: 00000286 ORIG_RAX: ffffffffffffff10
RAX: 1ffffffff11e1251 RBX: 0000000000000286 RCX: 1ffff1100dc281c5
RDX: dffffc0000000000 RSI: ffff88806e140e30 RDI: 0000000000000286
RBP: ffffffff88f79f60 R08: ffff8880ba52ac30 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
R13: ffff8880af5cd500 R14: 0000000000000000 R15: ffff88806e14f7c8
__rcu_read_unlock+0x158/0x160 kernel/rcu/update.c:260
rcu_read_unlock include/linux/rcupdate.h:684 [inline]
inet6_csk_xmit+0x2a0/0x4d0 net/ipv6/inet6_connection_sock.c:141
dccp_transmit_skb+0x8d6/0x11e0 net/dccp/output.c:142
dccp_xmit_packet+0x1c9/0x6d0 net/dccp/output.c:281
dccp_write_xmit+0x140/0x1a0 net/dccp/output.c:363
dccp_sendmsg+0x6f6/0x890 net/dccp/proto.c:811
inet_sendmsg+0x11a/0x4e0 net/ipv4/af_inet.c:762
sock_sendmsg_nosec net/socket.c:646 [inline]
sock_sendmsg+0xb5/0x100 net/socket.c:656
___sys_sendmsg+0x326/0x800 net/socket.c:2062
__sys_sendmmsg+0x129/0x330 net/socket.c:2152
SYSC_sendmmsg net/socket.c:2183 [inline]
SyS_sendmmsg+0x2f/0x50 net/socket.c:2178
do_syscall_64+0x1d5/0x640 arch/x86/entry/common.c:292
entry_SYSCALL_64_after_hwframe+0x46/0xbb
RIP: 0033:0x45e0f9
RSP: 002b:00007f8f75e74c68 EFLAGS: 00000246 ORIG_RAX: 0000000000000133
RAX: ffffffffffffffda RBX: 0000000000000004 RCX: 000000000045e0f9
RDX: 04000000000000d0 RSI: 0000000020003d40 RDI: 0000000000000006
RBP: 000000000119bfc8 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 000000000119bf8c
R13: 00007ffc1db4373f R14: 00007f8f75e759c0 R15: 000000000119bf8c

Allocated by task 8020:
save_stack mm/kasan/kasan.c:447 [inline]
set_track mm/kasan/kasan.c:459 [inline]
kasan_kmalloc+0xeb/0x160 mm/kasan/kasan.c:551
__do_kmalloc_node mm/slab.c:3682 [inline]
__kmalloc_node+0x4c/0x70 mm/slab.c:3689
kmalloc_node include/linux/slab.h:530 [inline]
kvmalloc_node+0x46/0xd0 mm/util.c:397
kvmalloc include/linux/mm.h:531 [inline]
kvzalloc include/linux/mm.h:539 [inline]
allocate_hook_entries_size net/netfilter/core.c:82 [inline]
nf_hook_entries_grow net/netfilter/core.c:125 [inline]
nf_register_net_hook+0x25d/0xa40 net/netfilter/core.c:277
nf_register_net_hooks+0x47/0x96 net/netfilter/core.c:382
ip6t_register_table+0x1d3/0x280 net/ipv6/netfilter/ip6_tables.c:1799
ip6table_raw_table_init net/ipv6/netfilter/ip6table_raw.c:44 [inline]
ip6table_raw_table_init+0x82/0xc0 net/ipv6/netfilter/ip6table_raw.c:33
xt_find_table_lock+0x247/0x3d0 net/netfilter/x_tables.c:1110
get_info+0xf5/0x530 net/ipv6/netfilter/ip6_tables.c:983
do_ip6t_get_ctl+0x125/0x7d0 net/ipv6/netfilter/ip6_tables.c:1709
nf_sockopt net/netfilter/nf_sockopt.c:104 [inline]
nf_getsockopt+0x62/0xc0 net/netfilter/nf_sockopt.c:122
ipv6_getsockopt+0x146/0x1e0 net/ipv6/ipv6_sockglue.c:1376
tcp_getsockopt+0x7b/0xc0 net/ipv4/tcp.c:3257
SYSC_getsockopt net/socket.c:1896 [inline]
SyS_getsockopt+0x102/0x1c0 net/socket.c:1878
do_syscall_64+0x1d5/0x640 arch/x86/entry/common.c:292
entry_SYSCALL_64_after_hwframe+0x46/0xbb

Freed by task 8020:
save_stack mm/kasan/kasan.c:447 [inline]
set_track mm/kasan/kasan.c:459 [inline]
kasan_slab_free+0xc3/0x1a0 mm/kasan/kasan.c:524
__cache_free mm/slab.c:3496 [inline]
kfree+0xc9/0x250 mm/slab.c:3815
kvfree+0x45/0x50 mm/util.c:416
nf_register_net_hook+0x6c2/0xa40 net/netfilter/core.c:296
nf_register_net_hooks+0x47/0x96 net/netfilter/core.c:382
ip6t_register_table+0x1d3/0x280 net/ipv6/netfilter/ip6_tables.c:1799
ip6table_security_table_init net/ipv6/netfilter/ip6table_security.c:61 [inline]
ip6table_security_table_init+0x82/0xc0 net/ipv6/netfilter/ip6table_security.c:50
xt_find_table_lock+0x247/0x3d0 net/netfilter/x_tables.c:1110
get_info+0xf5/0x530 net/ipv6/netfilter/ip6_tables.c:983
do_ip6t_get_ctl+0x125/0x7d0 net/ipv6/netfilter/ip6_tables.c:1709
nf_sockopt net/netfilter/nf_sockopt.c:104 [inline]
nf_getsockopt+0x62/0xc0 net/netfilter/nf_sockopt.c:122
ipv6_getsockopt+0x146/0x1e0 net/ipv6/ipv6_sockglue.c:1376
tcp_getsockopt+0x7b/0xc0 net/ipv4/tcp.c:3257
SYSC_getsockopt net/socket.c:1896 [inline]
SyS_getsockopt+0x102/0x1c0 net/socket.c:1878
do_syscall_64+0x1d5/0x640 arch/x86/entry/common.c:292
entry_SYSCALL_64_after_hwframe+0x46/0xbb

The buggy address belongs to the object at ffff8880af416d80
which belongs to the cache kmalloc-128 of size 128
The buggy address is located 0 bytes inside of
128-byte region [ffff8880af416d80, ffff8880af416e00)
The buggy address belongs to the page:
page:ffffea0002bd0580 count:1 mapcount:0 mapping:ffff8880af416000 index:0x0
flags: 0xfff00000000100(slab)
raw: 00fff00000000100 ffff8880af416000 0000000000000000 0000000100000015
raw: ffffea00025029a0 ffff88813fe81548 ffff88813fe80640 0000000000000000
page dumped because: kasan: bad access detected

Memory state around the buggy address:
ffff8880af416c80: fc fc fc fc fc fc fc fc 00 00 00 00 00 00 00 00
ffff8880af416d00: 00 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc
>ffff8880af416d80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
^
ffff8880af416e00: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
ffff8880af416e80: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
==================================================================


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzk...@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

syzbot

unread,
Mar 2, 2021, 12:57:18 AM3/2/21
to syzkaller...@googlegroups.com
syzbot has found a reproducer for the following issue on:

HEAD commit: 3242aa3a Linux 4.14.222
git tree: linux-4.14.y
console output: https://syzkaller.appspot.com/x/log.txt?x=17d0bea8d00000
kernel config: https://syzkaller.appspot.com/x/.config?x=d6fee509440d713f
dashboard link: https://syzkaller.appspot.com/bug?extid=663e49fa871bf5aad3fd
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=151716dad00000

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+663e49...@syzkaller.appspotmail.com

IPv6: ADDRCONF(NETDEV_UP): batadv_slave_1: link is not ready
batman_adv: batadv0: Interface activated: batadv_slave_1
IPv6: ADDRCONF(NETDEV_CHANGE): batadv_slave_1: link becomes ready
IPv6: ADDRCONF(NETDEV_CHANGE): veth1_to_batadv: link becomes ready
==================================================================
BUG: KASAN: use-after-free in nf_hook_slow+0x197/0x1a0 net/netfilter/core.c:466
Read of size 2 at addr ffff88809ca6b480 by task syz-executor.3/9444

CPU: 1 PID: 9444 Comm: syz-executor.3 Not tainted 4.14.222-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
<IRQ>
__dump_stack lib/dump_stack.c:17 [inline]
dump_stack+0x1b2/0x281 lib/dump_stack.c:58
print_address_description.cold+0x54/0x1d3 mm/kasan/report.c:252
kasan_report_error.cold+0x8a/0x191 mm/kasan/report.c:351
kasan_report mm/kasan/report.c:409 [inline]
__asan_report_load2_noabort+0x68/0x70 mm/kasan/report.c:428
nf_hook_slow+0x197/0x1a0 net/netfilter/core.c:466
nf_hook include/linux/netfilter.h:205 [inline]
NF_HOOK include/linux/netfilter.h:248 [inline]
mld_sendpack+0x884/0xea0 net/ipv6/mcast.c:1660
mld_send_initial_cr.part.0+0xf5/0x140 net/ipv6/mcast.c:2077
mld_send_initial_cr net/ipv6/mcast.c:1170 [inline]
mld_dad_timer_expire+0x140/0x520 net/ipv6/mcast.c:2096
call_timer_fn+0x14a/0x650 kernel/time/timer.c:1280
expire_timers+0x232/0x4d0 kernel/time/timer.c:1319
__run_timers kernel/time/timer.c:1637 [inline]
run_timer_softirq+0x1d5/0x5a0 kernel/time/timer.c:1650
__do_softirq+0x24d/0x9ff kernel/softirq.c:288
invoke_softirq kernel/softirq.c:368 [inline]
irq_exit+0x193/0x240 kernel/softirq.c:409
exiting_irq arch/x86/include/asm/apic.h:638 [inline]
smp_apic_timer_interrupt+0x141/0x5e0 arch/x86/kernel/apic/apic.c:1106
apic_timer_interrupt+0x93/0xa0 arch/x86/entry/entry_64.S:793
</IRQ>
RIP: 0010:arch_local_irq_restore arch/x86/include/asm/paravirt.h:779 [inline]
RIP: 0010:rcu_read_unlock_special+0x452/0xdd0 kernel/rcu/tree_plugin.h:542
RSP: 0018:ffff88809cf1eda8 EFLAGS: 00000286 ORIG_RAX: ffffffffffffff10
RAX: 1ffffffff11e1251 RBX: ffff88809d7f40c0 RCX: 1ffff11013afe937
RDX: dffffc0000000000 RSI: ffff88809d7f49c0 RDI: 0000000000000286
RBP: ffff88809d7f4444 R08: ffff8880ba42ac30 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000286
R13: ffff88809d7f4446 R14: ffff88809d7f4445 R15: 0000000000000000
__rcu_read_unlock+0x158/0x160 kernel/rcu/update.c:260
rcu_read_unlock include/linux/rcupdate.h:684 [inline]
is_bpf_text_address+0x9b/0x150 kernel/bpf/core.c:458
kernel_text_address kernel/extable.c:150 [inline]
kernel_text_address+0xbd/0xf0 kernel/extable.c:120
__kernel_text_address+0x9/0x30 kernel/extable.c:105
unwind_get_return_address arch/x86/kernel/unwind_orc.c:252 [inline]
unwind_get_return_address+0x51/0x90 arch/x86/kernel/unwind_orc.c:247
__save_stack_trace+0xa0/0x160 arch/x86/kernel/stacktrace.c:45
save_stack mm/kasan/kasan.c:447 [inline]
set_track mm/kasan/kasan.c:459 [inline]
kasan_kmalloc+0xeb/0x160 mm/kasan/kasan.c:551
kmem_cache_alloc+0x124/0x3c0 mm/slab.c:3552
kmem_cache_zalloc include/linux/slab.h:651 [inline]
__kernfs_new_node+0x6f/0x470 fs/kernfs/dir.c:632
kernfs_new_node+0x7b/0xe0 fs/kernfs/dir.c:677
__kernfs_create_file+0x3d/0x320 fs/kernfs/file.c:989
sysfs_add_file_mode_ns+0x1e1/0x450 fs/sysfs/file.c:307
create_files fs/sysfs/group.c:64 [inline]
internal_create_group+0x22b/0x710 fs/sysfs/group.c:134
sysfs_create_group fs/sysfs/group.c:156 [inline]
sysfs_create_groups fs/sysfs/group.c:183 [inline]
sysfs_create_groups+0x92/0x130 fs/sysfs/group.c:173
device_add_groups drivers/base/core.c:1064 [inline]
device_add_attrs drivers/base/core.c:1212 [inline]
device_add+0x7e5/0x15c0 drivers/base/core.c:1901
wiphy_register+0x1326/0x1cf0 net/wireless/core.c:809
ieee80211_register_hw+0x107f/0x2c90 net/mac80211/main.c:1055
mac80211_hwsim_new_radio+0x186a/0x2740 drivers/net/wireless/mac80211_hwsim.c:2705
hwsim_new_radio_nl+0x3aa/0x5d0 drivers/net/wireless/mac80211_hwsim.c:3164
genl_family_rcv_msg+0x572/0xb20 net/netlink/genetlink.c:600
genl_rcv_msg+0xaf/0x140 net/netlink/genetlink.c:625
netlink_rcv_skb+0x125/0x390 net/netlink/af_netlink.c:2433
genl_rcv+0x24/0x40 net/netlink/genetlink.c:636
netlink_unicast_kernel net/netlink/af_netlink.c:1287 [inline]
netlink_unicast+0x437/0x610 net/netlink/af_netlink.c:1313
netlink_sendmsg+0x62e/0xb80 net/netlink/af_netlink.c:1878
sock_sendmsg_nosec net/socket.c:646 [inline]
sock_sendmsg+0xb5/0x100 net/socket.c:656
___sys_sendmsg+0x6c8/0x800 net/socket.c:2062
__sys_sendmsg+0xa3/0x120 net/socket.c:2096
SYSC_sendmsg net/socket.c:2107 [inline]
SyS_sendmsg+0x27/0x40 net/socket.c:2103
do_syscall_64+0x1d5/0x640 arch/x86/entry/common.c:292
entry_SYSCALL_64_after_hwframe+0x46/0xbb
RIP: 0033:0x465ef9
RSP: 002b:00007fcd07a52188 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 000000000056bf60 RCX: 0000000000465ef9
RDX: 0000000000000000 RSI: 0000000020000040 RDI: 0000000000000004
RBP: 00000000004bcd1c R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 000000000056bf60
R13: 00007ffcf7a43f0f R14: 00007fcd07a52300 R15: 0000000000022000

Allocated by task 8001:
save_stack mm/kasan/kasan.c:447 [inline]
set_track mm/kasan/kasan.c:459 [inline]
kasan_kmalloc+0xeb/0x160 mm/kasan/kasan.c:551
__do_kmalloc_node mm/slab.c:3682 [inline]
__kmalloc_node+0x4c/0x70 mm/slab.c:3689
kmalloc_node include/linux/slab.h:530 [inline]
kvmalloc_node+0x46/0xd0 mm/util.c:397
kvmalloc include/linux/mm.h:531 [inline]
kvzalloc include/linux/mm.h:539 [inline]
allocate_hook_entries_size net/netfilter/core.c:82 [inline]
nf_hook_entries_grow net/netfilter/core.c:125 [inline]
nf_register_net_hook+0x25d/0xa40 net/netfilter/core.c:277
nf_register_net_hooks+0x47/0xa0 net/netfilter/core.c:382
ip6t_register_table+0x1d3/0x280 net/ipv6/netfilter/ip6_tables.c:1799
ip6table_mangle_table_init net/ipv6/netfilter/ip6table_mangle.c:101 [inline]
ip6table_mangle_table_init+0x82/0xc0 net/ipv6/netfilter/ip6table_mangle.c:90
xt_find_table_lock+0x247/0x3d0 net/netfilter/x_tables.c:1110
get_info+0xf5/0x530 net/ipv6/netfilter/ip6_tables.c:983
do_ip6t_get_ctl+0x125/0x7d0 net/ipv6/netfilter/ip6_tables.c:1709
nf_sockopt net/netfilter/nf_sockopt.c:104 [inline]
nf_getsockopt+0x62/0xc0 net/netfilter/nf_sockopt.c:122
ipv6_getsockopt+0x146/0x1e0 net/ipv6/ipv6_sockglue.c:1376
tcp_getsockopt+0x7b/0xc0 net/ipv4/tcp.c:3257
SYSC_getsockopt net/socket.c:1896 [inline]
SyS_getsockopt+0x102/0x1c0 net/socket.c:1878
do_syscall_64+0x1d5/0x640 arch/x86/entry/common.c:292
entry_SYSCALL_64_after_hwframe+0x46/0xbb

Freed by task 8001:
save_stack mm/kasan/kasan.c:447 [inline]
set_track mm/kasan/kasan.c:459 [inline]
kasan_slab_free+0xc3/0x1a0 mm/kasan/kasan.c:524
__cache_free mm/slab.c:3496 [inline]
kfree+0xc9/0x250 mm/slab.c:3815
kvfree+0x45/0x50 mm/util.c:416
nf_register_net_hook+0x6c2/0xa40 net/netfilter/core.c:296
nf_register_net_hooks+0x47/0xa0 net/netfilter/core.c:382
ip6t_register_table+0x1d3/0x280 net/ipv6/netfilter/ip6_tables.c:1799
ip6table_raw_table_init net/ipv6/netfilter/ip6table_raw.c:44 [inline]
ip6table_raw_table_init+0x82/0xc0 net/ipv6/netfilter/ip6table_raw.c:33
xt_find_table_lock+0x247/0x3d0 net/netfilter/x_tables.c:1110
get_info+0xf5/0x530 net/ipv6/netfilter/ip6_tables.c:983
do_ip6t_get_ctl+0x125/0x7d0 net/ipv6/netfilter/ip6_tables.c:1709
nf_sockopt net/netfilter/nf_sockopt.c:104 [inline]
nf_getsockopt+0x62/0xc0 net/netfilter/nf_sockopt.c:122
ipv6_getsockopt+0x146/0x1e0 net/ipv6/ipv6_sockglue.c:1376
tcp_getsockopt+0x7b/0xc0 net/ipv4/tcp.c:3257
SYSC_getsockopt net/socket.c:1896 [inline]
SyS_getsockopt+0x102/0x1c0 net/socket.c:1878
do_syscall_64+0x1d5/0x640 arch/x86/entry/common.c:292
entry_SYSCALL_64_after_hwframe+0x46/0xbb

The buggy address belongs to the object at ffff88809ca6b480
which belongs to the cache kmalloc-128 of size 128
The buggy address is located 0 bytes inside of
128-byte region [ffff88809ca6b480, ffff88809ca6b500)
The buggy address belongs to the page:
page:ffffea0002729ac0 count:1 mapcount:0 mapping:ffff88809ca6b000 index:0x0
flags: 0xfff00000000100(slab)
raw: 00fff00000000100 ffff88809ca6b000 0000000000000000 0000000100000015
raw: ffffea00027b3560 ffffea00027a3ae0 ffff88813fe80640 0000000000000000
page dumped because: kasan: bad access detected

Memory state around the buggy address:
ffff88809ca6b380: fc fc fc fc fc fc fc fc 00 00 00 00 00 00 00 00
ffff88809ca6b400: 00 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc
>ffff88809ca6b480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
^
ffff88809ca6b500: fc fc fc fc fc fc fc fc 00 00 00 00 00 00 00 00
ffff88809ca6b580: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
==================================================================

Reply all
Reply to author
Forward
0 new messages