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=-6.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 51DC9C432BE for ; Wed, 1 Sep 2021 08:36:43 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 084C061053 for ; Wed, 1 Sep 2021 08:36:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 084C061053 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=tls.msk.ru Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:45168 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mLLjd-0004Xh-96 for qemu-devel@archiver.kernel.org; Wed, 01 Sep 2021 04:36:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44744) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mLLdE-00022m-Mi; Wed, 01 Sep 2021 04:30:04 -0400 Received: from isrv.corpit.ru ([86.62.121.231]:48559) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mLLd8-0006Fx-Oc; Wed, 01 Sep 2021 04:30:04 -0400 Received: from tsrv.corpit.ru (tsrv.tls.msk.ru [192.168.177.2]) by isrv.corpit.ru (Postfix) with ESMTP id 07AD24000A; Wed, 1 Sep 2021 11:29:55 +0300 (MSK) Received: from [192.168.177.132] (mjt-x200la.wg.tls.msk.ru [192.168.177.132]) by tsrv.corpit.ru (Postfix) with ESMTP id D03297D; Wed, 1 Sep 2021 11:29:54 +0300 (MSK) Subject: Re: [PATCH] qemu-sockets: fix unix socket path copy (again) To: Peter Maydell References: <20210831182623.1792608-1-mjt@msgid.tls.msk.ru> From: Michael Tokarev Message-ID: <9785281e-85cb-a993-d35a-94ef11df9b67@msgid.tls.msk.ru> Date: Wed, 1 Sep 2021 11:29:58 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: ru-RU Content-Transfer-Encoding: 7bit Received-SPF: none client-ip=86.62.121.231; envelope-from=mjt@tls.msk.ru; helo=isrv.corpit.ru X-Spam_score_int: -77 X-Spam_score: -7.8 X-Spam_bar: ------- X-Spam_report: (-7.8 / 5.0 requ) BAYES_00=-1.9, NICE_REPLY_A=-0.932, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Marc-Andr=c3=a9_Lureau?= , =?UTF-8?Q?Daniel_P_=2e_Berrang=c3=a9?= , QEMU Developers , qemu-stable Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" On 31.08.2021 22:47, Peter Maydell wrote: > On Tue, 31 Aug 2021 at 19:34, Michael Tokarev wrote: .. >> - assert(salen >= sizeof(su->sun_family) + 1 && >> - salen <= sizeof(struct sockaddr_un)); >> + /* there's a corner case when trailing \0 does not fit into >> + * sockaddr_un. Compare length with sizeof(sockaddr_storage), >> + * not with sizeof(sockaddr_un), since this is what we actually >> + * provide, to ensure we had no truncation and a room for >> + * the trailing \0 which we add below. >> + * When salen == sizeof(sun_family) it is unnamed socket, >> + * and when first byte of sun_path is \0, it is abstract. */ >> + assert(salen >= sizeof(su->sun_family) && >> + salen <= sizeof(struct sockaddr_storage)); > > Again, why are we asserting an upper bound? We don't care here: > the representation in the SocketAddress structure has no length > limit on the path. (Conversely, we do care about the max length > when we convert from a SocketAddress to a sockaddr_un: we do this > in eg unix_connect_saddr().) We have sizeof(sockaddr_storage) space there. If the kernel returned salen greather than that, this means we received only partial address and can't rely on it. It is like snprintf() returning more bytes than available in the buffer - it says how much bytes NEEDED. /mjt