• Marcelo Ricardo Leitner's avatar
    sctp: fix error handling on stream scheduler initialization · 4d141581
    Marcelo Ricardo Leitner authored
    It allocates the extended area for outbound streams only on sendmsg
    calls, if they are not yet allocated.  When using the priority
    stream scheduler, this initialization may imply into a subsequent
    allocation, which may fail.  In this case, it was aborting the stream
    scheduler initialization but leaving the ->ext pointer (allocated) in
    there, thus in a partially initialized state.  On a subsequent call to
    sendmsg, it would notice the ->ext pointer in there, and trip on
    uninitialized stuff when trying to schedule the data chunk.
    
    The fix is undo the ->ext initialization if the stream scheduler
    initialization fails and avoid the partially initialized state.
    
    Although syzkaller bisected this to commit 4ff40b86 ("sctp: set
    chunk transport correctly when it's a new asoc"), this bug was actually
    introduced on the commit I marked below.
    
    Reported-by: syzbot+c1a380d42b190ad1e559@syzkaller.appspotmail.com
    Fixes: 5bbbbe32 ("sctp: introduce stream scheduler foundations")
    Tested-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Acked-by: default avatarNeil Horman <nhorman@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4d141581
stream.c 26.2 KB