From nobody Wed Nov 12 10:10:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1569876680; cv=none; d=zoho.com; s=zohoarc; b=TjaMAiAUzqFwboqi4nQ4nmed/+mF9BJI93VDVm2DrmhYWEefNoLPugniZkTd6snz2fsuDuIt+TYmf6USS1Xit9LAT/yEGLZ1+tRHq33TNl3JJr7vLQ2Wu0Q64H0LHrHYB36Frl3heMopDx9AIWI+QqgC3fAskEU+Ar1nIji2kN4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569876680; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=csUz3G+oANfAghQDvskgbpzawb3MHELRqPU8L59Mp1o=; b=nheJNrM+wVb+XdP2ESlasn4OBaGrwg5gx3a9pJrjCjubBb11HmitxrHhzTbtOTeDG7I343rzDMlwytZb7fvnHeO2o+9eQJ3QY4rZTFPQvFaVsMfWjrunVGUZFnARZMwpjACebzJQl2KEKaGkEqAR5+zW6iBK7rtzBcEx4YCtgUQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156987668073011.045081972994922; Mon, 30 Sep 2019 13:51:20 -0700 (PDT) Received: from localhost ([::1]:57186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iF2db-0006Pc-L5 for importer@patchew.org; Mon, 30 Sep 2019 16:51:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45799) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iF2Hg-00043S-AQ for qemu-devel@nongnu.org; Mon, 30 Sep 2019 16:28:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iF2Hf-0002bY-0n for qemu-devel@nongnu.org; Mon, 30 Sep 2019 16:28:40 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:51246) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iF2He-0002ah-Nv for qemu-devel@nongnu.org; Mon, 30 Sep 2019 16:28:38 -0400 Received: by mail-wm1-x344.google.com with SMTP id 7so874237wme.1 for ; Mon, 30 Sep 2019 13:28:38 -0700 (PDT) Received: from nullptr.home.dirty-ice.org (2a01-036c-0113-e8f4-0000-0000-0000-0005.pool6.digikabel.hu. [2a01:36c:113:e8f4::5]) by smtp.gmail.com with ESMTPSA id o9sm34402911wrh.46.2019.09.30.13.28.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Sep 2019 13:28:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=csUz3G+oANfAghQDvskgbpzawb3MHELRqPU8L59Mp1o=; b=r+9j5fBpxg2iXZ/pwK5GGJgBTHSX9ohZZLZwfrphP5xJ99fWoYD4Qj+dvNFyh7oeJa 2gHRZ8+RDzLHJipaTtbwbACjWlLBnHA7KHrvyN+klV+tEHPAWMpjx/ztvjwDVYNb5R0M hPRmVrdDVXPr1OlFaNO+VUlg2amIXA5KJCO5bqD7ZbZ8Wp2ei7TLac3UslzOmQc5y1Wh NfH278NNjV3ZXrWKgQswOTr+W18nwtJA2P9nhd7cckzs0/qD1lUcBO0jsJw1FheY8w6R 0zYMNBZfohGxpyQuUFm5uf4kZfCr/sKOauJSij021pVTGk1xSzxJJoLzO2ldIAplIOUS pV8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=csUz3G+oANfAghQDvskgbpzawb3MHELRqPU8L59Mp1o=; b=PDVYRf4TPJqdzWvn268lU8dqmPEo2F3akQPVO5RdEhepx2njGdlqkH+g8s0DhTT1dn 9cna6l2xI/N77+KdMOLrJt4Gdt76GXSARTxPub/3tnv8hZ/e19I6H0IpFrjHiZsoFmVm 6wIfqJKNkD9NrDmWFhdqjSdNpO9Pjj9sePrwer2n+fhkN8SiCdNXOpDJY/iqA/mgCITB ++XmYb/1KFTNRBHcHDNYypBgyONmZmYiN7flJmUfwyeF83M+/TIm/v/7Jyr+6KK9geBv xQbeaKOMVDHkhbP0MpXxHiFYyUwkYuCuJJpPdFQrkDXlANvqlXNH00YFDIwEbdSC0yp8 TLDA== X-Gm-Message-State: APjAAAV//+hnrz8QLgEn+zV2TBTaNHKJ+sYSrwAWaXjImdMDKk4D8Tah SlOcc1npb//67kbk1p3GIT8Amxmi X-Google-Smtp-Source: APXvYqwj2MLAWGG5qz0BviLXevTshuUWdIf+8rgrkIimcTbAQD7rAiT2RlpN8qm0JvX7dYKji7kHOg== X-Received: by 2002:a05:600c:2059:: with SMTP id p25mr800019wmg.50.1569875317622; Mon, 30 Sep 2019 13:28:37 -0700 (PDT) From: "=?UTF-8?q?K=C5=91v=C3=A1g=C3=B3=2C=20Zolt=C3=A1n?=" X-Google-Original-From: =?UTF-8?q?K=C5=91v=C3=A1g=C3=B3=2C=20Zolt=C3=A1n?= To: qemu-devel@nongnu.org Subject: [PATCH v5 09/10] usbaudio: change playback counters to 64 bit Date: Mon, 30 Sep 2019 22:29:02 +0200 Message-Id: <2c3ce2e69a1be1ff362dca8d6c8f5aa6d228382c.1569874641.git.DirtY.iCE.hu@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::344 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: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) With stereo playback, they need about 375 minutes of continuous audio playback to overflow, which is usually not a problem (as stopping and later resuming playback resets the counters). But with 7.1 audio, they only need about 95 minutes to overflow. After the overflow, the buf->prod % USBAUDIO_PACKET_SIZE(channels) assertion no longer holds true, which will result in overflowing the buffer. With 64 bit variables, it would take about 762000 years to overflow. Signed-off-by: K=C5=91v=C3=A1g=C3=B3, Zolt=C3=A1n --- hw/usb/dev-audio.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c index e42bdfbdc1..ea604bbb8e 100644 --- a/hw/usb/dev-audio.c +++ b/hw/usb/dev-audio.c @@ -578,9 +578,9 @@ static const USBDesc desc_audio_multi =3D { =20 struct streambuf { uint8_t *data; - uint32_t size; - uint32_t prod; - uint32_t cons; + size_t size; + uint64_t prod; + uint64_t cons; }; =20 static void streambuf_init(struct streambuf *buf, uint32_t size, @@ -601,7 +601,7 @@ static void streambuf_fini(struct streambuf *buf) =20 static int streambuf_put(struct streambuf *buf, USBPacket *p, uint32_t cha= nnels) { - uint32_t free =3D buf->size - (buf->prod - buf->cons); + int64_t free =3D buf->size - (buf->prod - buf->cons); =20 if (free < USBAUDIO_PACKET_SIZE(channels)) { return 0; @@ -610,6 +610,8 @@ static int streambuf_put(struct streambuf *buf, USBPack= et *p, uint32_t channels) return 0; } =20 + /* can happen if prod overflows */ + assert(buf->prod % USBAUDIO_PACKET_SIZE(channels) =3D=3D 0); usb_packet_copy(p, buf->data + (buf->prod % buf->size), USBAUDIO_PACKET_SIZE(channels)); buf->prod +=3D USBAUDIO_PACKET_SIZE(channels); @@ -618,10 +620,10 @@ static int streambuf_put(struct streambuf *buf, USBPa= cket *p, uint32_t channels) =20 static uint8_t *streambuf_get(struct streambuf *buf, size_t *len) { - uint32_t used =3D buf->prod - buf->cons; + int64_t used =3D buf->prod - buf->cons; uint8_t *data; =20 - if (!used) { + if (used <=3D 0) { *len =3D 0; return NULL; } --=20 2.23.0