From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 968C0C282D8 for ; Fri, 1 Feb 2019 14:20:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 66B9D218AC for ; Fri, 1 Feb 2019 14:20:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="udOSdsJ1" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727680AbfBAOUm (ORCPT ); Fri, 1 Feb 2019 09:20:42 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:42863 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725817AbfBAOUm (ORCPT ); Fri, 1 Feb 2019 09:20:42 -0500 Received: by mail-qt1-f193.google.com with SMTP id d19so7594136qtq.9; Fri, 01 Feb 2019 06:20:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=AEnWXt2kLNfMHuwnEFPISnQOtWYMGS58g+EfJ/ZIKOI=; b=udOSdsJ1mlGc0XAc76K2YweefupVc9buNts83jtvCAQOPl5Xsew7c5C9nfSUJGRFgL S2iwmy+QHBuT8hAxQYWQz+4O7B0rDxnOChVwsHRiyJwwIBS2zY31Wsbay2TJb89BuDNH WLofaNsfiRJRVEcgsokG0FG0US3r1MZRftI0xjgKUWuxtIFxwLhjxc0J7XSuzU1eEAJQ dfd9oS/mFxfGNDTJDmxuxtHRuHAZsP+KGgzMJTkm8EH8atSyr70SuFy/N0wXPzf/o06y BC0n9tlzxPrrfteGJEm/WRyNeeSPFjqoNmZkdj8LPfib1qyDQf6dY56Gihos18Fipulv yrWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=AEnWXt2kLNfMHuwnEFPISnQOtWYMGS58g+EfJ/ZIKOI=; b=FDUL2bfpCn+/qZSMZnNNPTiKyLF8kLzh/iKwmvKrA0tOiAuiKGuaiGrLomKHaNqDPV Ufspk4oDejwUT/HApIAHcaucYKaCce5YijmkRldU10gnNegKV50cYFIYw5+IG0+tYHAZ 087Iw3HMihfZqDixush3wfSXPl/Qxqf08z3Vz7jEFtqh3JfZP1Xy9yojTfP34jMrQRFP ghiXYNyl5Z709qPZ1JaadpZV9tzSDZBf3aC4yN2ogWQXWb2P7t6v5zHnsV69IRBHLJPh trrHe3C9jxLVQous5mrPaaS3MrelgfZ/EHrXWQjnL6HkNupRCpp8bauB/OPC7WevBXuN BkqQ== X-Gm-Message-State: AJcUukf9qhoKWEhFJzkDYiH8yEYarvrBkHJkTTQzWneEhAQB283uAsFV hRMp0E+s3G8gqS+lQSu2b/Q= X-Google-Smtp-Source: ALg8bN4dZQXekbKZ5Vo0pAaL9nPADNHQ/wFEFO/d6VPb9H4luFKTR0SQvEMTAsJPeu0XqX1LGnWyhg== X-Received: by 2002:aed:2844:: with SMTP id r62mr39630303qtd.112.1549030840969; Fri, 01 Feb 2019 06:20:40 -0800 (PST) Received: from localhost.localdomain ([168.181.49.73]) by smtp.gmail.com with ESMTPSA id x49sm9372503qta.89.2019.02.01.06.20.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Feb 2019 06:20:39 -0800 (PST) Received: by localhost.localdomain (Postfix, from userid 1000) id 23BC7180C41; Fri, 1 Feb 2019 12:20:37 -0200 (-02) Date: Fri, 1 Feb 2019 12:20:37 -0200 From: Marcelo Ricardo Leitner To: Greg Kroah-Hartman Cc: Vlad Yasevich , Neil Horman , linux-sctp@vger.kernel.org, netdev@vger.kernel.org, vuln@secunia.com Subject: Re: [PATCH net] sctp: walk the list of asoc safely Message-ID: <20190201142037.GC10521@localhost.localdomain> References: <20190201141522.GA20785@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190201141522.GA20785@kroah.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Fri, Feb 01, 2019 at 03:15:22PM +0100, Greg Kroah-Hartman wrote: > In sctp_sendmesg(), when walking the list of endpoint associations, the > association can be dropped from the list, making the list corrupt. > Properly handle this by using list_for_each_entry_safe() > > Fixes: 4910280503f3 ("sctp: add support for snd flag SCTP_SENDALL process in sendmsg") > Reported-by: Secunia Research > Tested-by: Secunia Research > Signed-off-by: Greg Kroah-Hartman > > diff --git a/net/sctp/socket.c b/net/sctp/socket.c > index f93c3cf9e567..65d6d04546ae 100644 > --- a/net/sctp/socket.c > +++ b/net/sctp/socket.c > @@ -2027,7 +2027,7 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len) > struct sctp_endpoint *ep = sctp_sk(sk)->ep; > struct sctp_transport *transport = NULL; > struct sctp_sndrcvinfo _sinfo, *sinfo; > - struct sctp_association *asoc; > + struct sctp_association *asoc, *tmp; > struct sctp_cmsgs cmsgs; > union sctp_addr *daddr; > bool new = false; > @@ -2053,7 +2053,7 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len) Extending the context here by 1 line: lock_sock(sk); > > /* SCTP_SENDALL process */ > if ((sflags & SCTP_SENDALL) && sctp_style(sk, UDP)) { > - list_for_each_entry(asoc, &ep->asocs, asocs) { > + list_for_each_entry_safe(asoc, tmp, &ep->asocs, asocs) { With the socket being locked by here, how can an asoc be removed while the list is being traversed? The socket lock should be protecting from it. > err = sctp_sendmsg_check_sflags(asoc, sflags, msg, > msg_len); > if (err == 0)