Re: [PATCH] Add protection for bmp length out of range

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2024-02-28 at 00:20 +0100, Florian Westphal wrote:
>  	 
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>  lena wang <lena.wang@xxxxxxxxxxxx> wrote:
> > UBSAN load reports an exception of BRK#5515 SHIFT_ISSUE:Bitwise
> shifts
> > that are out of bounds for their data type.
> > 
> > vmlinux   get_bitmap(b=75) + 712
> > <net/netfilter/nf_conntrack_h323_asn1.c:0>
> > vmlinux   decode_seq(bs=0xFFFFFFD008037000, f=0xFFFFFFD008037018,
> > level=134443100) + 1956
> > <net/netfilter/nf_conntrack_h323_asn1.c:592>
> > vmlinux   decode_choice(base=0xFFFFFFD0080370F0, level=23843636) +
> 1216
> > <net/netfilter/nf_conntrack_h323_asn1.c:814>
> > vmlinux   decode_seq(f=0xFFFFFFD0080371A8, level=134443500) + 812
> > <net/netfilter/nf_conntrack_h323_asn1.c:576>
> > vmlinux   decode_choice(base=0xFFFFFFD008037280, level=0) + 1216
> > <net/netfilter/nf_conntrack_h323_asn1.c:814>
> > vmlinux   DecodeRasMessage() + 304
> > <net/netfilter/nf_conntrack_h323_asn1.c:833>
> > vmlinux   ras_help() + 684
> > <net/netfilter/nf_conntrack_h323_main.c:1728>
> > vmlinux   nf_confirm() + 188
> > <net/netfilter/nf_conntrack_proto.c:137>
> > vmlinux   ipv4_confirm() + 204
> > <net/netfilter/nf_conntrack_proto.c:169>
> > vmlinux   nf_hook_entry_hookfn() + 56
> > <include/linux/netfilter.h:137>
> > vmlinux   nf_hook_slow(s=0) + 156
> > <net/netfilter/core.c:584>
> > vmlinux   nf_hook(pf=2, hook=1, sk=0, outdev=0) + 748
> > <include/linux/netfilter.h:254>
> > vmlinux   NF_HOOK(pf=2, hook=1, sk=0, out=0) + 748
> > <include/linux/netfilter.h:297>
> > vmlinux   ip_local_deliver() + 1072
> > <net/ipv4/ip_input.c:252>
> > vmlinux   dst_input() + 64
> > <include/net/dst.h:443>
> > vmlinux   ip_rcv_finish(sk=0) + 120
> > <net/ipv4/ip_input.c:435>
> 
> Can you trim this a bit?  There is no need to have a full stacktrace
> in the changelog.
> 
Yes and I will change in v2 patch.
Thanks.

> > Due to abnormal data in skb->data, the extension bitmap length
> > exceeds 32 when decoding ras message then uses the length to make
> > a shift operation. It will change into negative after several loop.
> > UBSAN load could detect a negative shift as an undefined behaviour
> > and reports exception.
> > So we add the protection to avoid the length exceeding 32. Or else
> > it will return out of range error and stop decoding.
> > 
> > Signed-off-by: lena wang <lena.wang@xxxxxxxxxxxx>
> > ---
> >  net/netfilter/nf_conntrack_h323_asn1.c | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> >         if (base)
> > --
> > 2.18.0
> > 
> > diff --git a/net/netfilter/nf_conntrack_h323_asn1.c
> > b/net/netfilter/nf_conntrack_h323_asn1.c
> > index e697a824b001..85be1c589ef0 100644
> > --- a/net/netfilter/nf_conntrack_h323_asn1.c
> > +++ b/net/netfilter/nf_conntrack_h323_asn1.c
> > @@ -589,6 +589,8 @@ static int decode_seq(struct bitstr *bs, const
> > struct field_t *f,
> >         bmp2_len = get_bits(bs, 7) + 1;
> >         if (nf_h323_error_boundary(bs, 0, bmp2_len))
> >                 return H323_ERROR_BOUND;
> > +       if (bmp2_len > 32)
> > +               return H323_ERROR_RANGE;
> >         bmp2 = get_bitmap(bs, bmp2_len);
> 
> There is another get_bitmap call earlier in this function, can
> you update that too and submit a v2?
> 
> Thanks!
The first caller's len comes from fields f->sz that defines in
net/netfilter/nf_conntrack_h323_type.c. It will not exceed 32.
Is it necessary to add this protection?

Thanks.





[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux