Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2472470pxj; Mon, 10 May 2021 03:57:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz3kPEoXsEqlyQVEPNBeAnpjK3PJ7QRKwZUnF1Z8pr19o4paLap5VZuPwufqGH3qLZXn3Hb X-Received: by 2002:a05:6e02:1291:: with SMTP id y17mr20673395ilq.112.1620644249395; Mon, 10 May 2021 03:57:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620644249; cv=none; d=google.com; s=arc-20160816; b=slnQhfyGsIlOiVMpscy2egWSz1RlJm1ttevrKh5C/j0OPxmZ48aystYR2g0m9XQosJ JHRo+9W/LP+aT2Y2wj1zRPpT05O3JjR/sym72OfBp2bgCKcFoI/meFsh2IYZLeq09uGf Z2MK2jGEQXoMWmIE3tet585Rv62wRORXVwo5M55z6OFczPZDNeX2Uew4NnjDkLaq+wMG ehhKySQhDJ2ptps+pM+rrlF+Jsgrp6Vf4Lh4YVRhTf3eQYM5ycPK2ZdjNV+wumuyjtQm UMuYbmyWuf50KkoHGv6JcHK+7sJX7BKjGbeimoSZGwWhFw8pUputSPVHdvHtfHJQbj5x nSGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=X9zbxSIT/TeHptxscQnU2vPdE3E3rV9Vi3l/iPGMH8A=; b=c1S3GtcbEL6vKL6v4TIb9LwoTzO9fRQ2qqh1AvjKQoRWrmiAcVCfPBvRkgZrcHnWVV hvb9ZGUBBxq10c00YXSCiQYzT42E6Z66kh4uyY0H28m5ltHRCsWxfi839UB5B+jfx6a2 umNRWP4iSjkjz5CQN2MFkmlvfUhvYGr5iVOvFkfw370BgdRwNzYfHUvqtVDCSkfdS9uA SrDpBIdj/gxGcvGqwTZL7zTPTi59MzCHUgn2O2U5/pzmIdAvpskX0WmNP+MpfOqpTGDl 1iqgfbXkiERFYf2VJIW1Qc4XExXvF/WX2e/Qg5tsidfSHBSAIcNLg5runWncYk7dvgtM ex8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=RVBZi1vb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x5si16991792ilu.59.2021.05.10.03.57.16; Mon, 10 May 2021 03:57:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=RVBZi1vb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233809AbhEJKzO (ORCPT + 99 others); Mon, 10 May 2021 06:55:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:59618 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232710AbhEJKoe (ORCPT ); Mon, 10 May 2021 06:44:34 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8AFC761864; Mon, 10 May 2021 10:33:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620642812; bh=s4bEDhrcdO7IwratN3VIoVQJwBOVOaLx+cy+meq0g8w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RVBZi1vbrmFmJs/BBk4saZMvfcE/Px2PAO5+/c+emPFLdosrbFKdu0I/okx8IK9nJ pxUgITx2IQDxb/LEeKZNmwYJj5J+G2UTLU2FWP1Fl87eEiDxVhhH7xUTEgHLKmpCNN Sr6T2jJ0SRJnjjd2JmEzXVDy0OZbFK4vTewInVnY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thomas Gleixner , Vitaly Kuznetsov , Sasha Levin Subject: [PATCH 5.10 062/299] genirq/matrix: Prevent allocation counter corruption Date: Mon, 10 May 2021 12:17:39 +0200 Message-Id: <20210510102006.940525090@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510102004.821838356@linuxfoundation.org> References: <20210510102004.821838356@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Vitaly Kuznetsov [ Upstream commit c93a5e20c3c2dabef8ea360a3d3f18c6f68233ab ] When irq_matrix_free() is called for an unallocated vector the managed_allocated and total_allocated counters get out of sync with the real state of the matrix. Later, when the last interrupt is freed, these counters will underflow resulting in UINTMAX because the counters are unsigned. While this is certainly a problem of the calling code, this can be catched in the allocator by checking the allocation bit for the to be freed vector which simplifies debugging. An example of the problem described above: https://lore.kernel.org/lkml/20210318192819.636943062@linutronix.de/ Add the missing sanity check and emit a warning when it triggers. Suggested-by: Thomas Gleixner Signed-off-by: Vitaly Kuznetsov Signed-off-by: Thomas Gleixner Link: https://lore.kernel.org/r/20210319111823.1105248-1-vkuznets@redhat.com Signed-off-by: Sasha Levin --- kernel/irq/matrix.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/irq/matrix.c b/kernel/irq/matrix.c index 651a4ad6d711..8e586858bcf4 100644 --- a/kernel/irq/matrix.c +++ b/kernel/irq/matrix.c @@ -423,7 +423,9 @@ void irq_matrix_free(struct irq_matrix *m, unsigned int cpu, if (WARN_ON_ONCE(bit < m->alloc_start || bit >= m->alloc_end)) return; - clear_bit(bit, cm->alloc_map); + if (WARN_ON_ONCE(!test_and_clear_bit(bit, cm->alloc_map))) + return; + cm->allocated--; if(managed) cm->managed_allocated--; -- 2.30.2