From nobody Tue Jun 16 14:55:00 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D90BF39D6CF for ; Mon, 20 Apr 2026 11:52:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776685959; cv=none; b=JYohRKmNy22unblOZLjnrFEb2M7OSqLmWhZ1FG8DxeDTJme51cxsqZ8b+INqhMD4s+2idZbrxSUHQC29y0nOCRwTzKR8WOgeTfLtMpY9qizt4AWP273xzKXbY/PsCa/TNOA9X536LtutUdvIaByDWO0sERxqYPVDrsb3IS1qjNU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776685959; c=relaxed/simple; bh=vHwBqswcdQZaeVsEc2gwd6vRqAC/RTvzirs9erExNeo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=oYwx2nW8sPdvsmBz+FktlQrWbQyFvp+D29c6JOJ3pa2gr3qV3azd6GLwAefsY51gpUi4/juAbh6T6NpoKhDBDgezynl+nQP6Snt2A3T3rb9H5hdlK4/lAvanIBGGUWURdUB5bfuifWtvlsBa4tnS4ECtZM7/4ZH5tR9fQuwsepY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=P6c/0Rde; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="P6c/0Rde" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4891b0786beso8723345e9.1 for ; Mon, 20 Apr 2026 04:52:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1776685956; x=1777290756; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=Ft3GZswCSIEeKUFgI0RRTCd8g+ojVNAgLUGVNSAH9vY=; b=P6c/0RdeatH06jw2Cphnqj/qEDNXlVW+yRyAm1WhLnYJVMdKyZoILjUo0urohSwTpN KUMPvttkgYN0M/1B50Qn148+BwFMSTXt/1NZh51AUENnK8qwe7rFnVya1WAppXf+lpje HhqdcwRYp7J0zmu6ZesAcIBAq+rS4ExjC23Z4/AWCKdRaYPPpIFdp28WNA6rx/By6uWk hwdMvVeI5XwWFdASjnFFZavDYcQ+C04Af9Xbw1T3KU8tqJ/A1Ly2E1DoaWDusWzDoUMc vYc7kGWNLCwWGMbdG8wi99I7lKPxz7cxptEdcIsdcYO7sYXOMllUtyM0VvXz+QlWh0VR SYdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776685956; x=1777290756; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Ft3GZswCSIEeKUFgI0RRTCd8g+ojVNAgLUGVNSAH9vY=; b=U2iosFYyl1/AzRqcfxPhaBb+ZcE0bH9//0Owc7LVBbSg7Zp+Ok/9JG61MBUwyMRpqe MUbB+R7G7ftva3lddYm19vi65bxR7idjNZXhTqvK8HjCTZccNRj1yhSv17rMMoKLWUop XcxzRwQhQWzjRKQ+P/D+mhN9cw3NE/ydulWOy9CK60Je8gKxo2jsf0aUd3Nm/W+dB6sm 3uA+3y4bRfcANyncwDJXXjX0VdmUIrQ8yi7C0A9hux4uc7kHBrl+1LPleu1BKB8UHacQ mc9EM99JgGWpZQAKeyoZaP50VE5LoiEjn6a5/6LEEa3VhbI6GSGXTNMrutglg/aL3fJp C/vA== X-Forwarded-Encrypted: i=1; AFNElJ85wum2MR4t0TT68pc7YNyRupq3gMMa0VXFS6xNWwU4wFAQ1kMHG1jk65dvyt2l2Wuuv2Qzg8Ok+EsjSl4=@vger.kernel.org X-Gm-Message-State: AOJu0YzNL1sJwRhGxMiywCZ05fuM9CWcGQkFF6KP6JMUvbo6xnpp0PzN mEbOxJCzsOFhP5ZuTlsjSnY03mhtwNaU3eqHL+IdfI8czivR08mGacKu7XqJbTaxzWE= X-Gm-Gg: AeBDievkeUk1JsguuCOy/YSx9sFJd83T6H0ulmaJLnxFh7jGibBTvDacJqp1UUwJ2xI CNbuHTC/HW2sDoyuFjkuj236Qk54no9nFOr0Fm0b2OE1g+nXNRHOT0ngS1bL6mCPGcvKzApSXLG trUAt3/Nf4Lb4T2C1bbmXzkVHDfteLguu2oKA1pHS7k5R+dvFzh/6K3FJXzbWenr3wqufti0y3u ceGU1EJkTWQsOs42oagSHJcj6QY9+KIraJLl6c7cWTrbrh14GoOQ84BD3z5225mo4vCrN0O8bBl XWN/Lr8hwsvTBFfpB1Cmew64Bl6nj0QkraDSkabCX1KJFDA1Jf6rkebcgF+h26wGBA+SyhHmrjV 7SsFKSU7pfYmg9M5A9IRIJhPNEFFjRouDkjUgM0Am6RFCsvJ3smqssQmI3HkneLN/kVQsF3Mj/+ MRPD2T1Id/mr2htk2R0hmvcbqsUJ4ssu4+fYOc9tw= X-Received: by 2002:a05:600c:5252:b0:486:f9d0:aac8 with SMTP id 5b1f17b1804b1-488fb768483mr204267335e9.18.1776685956193; Mon, 20 Apr 2026 04:52:36 -0700 (PDT) Received: from [192.168.1.3] ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4891c320084sm120790985e9.2.2026.04.20.04.52.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2026 04:52:35 -0700 (PDT) From: James Clark Date: Mon, 20 Apr 2026 12:52:17 +0100 Subject: [PATCH] perf annotate: Fix crashes on empty annotate windows Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260420-james-perf-annotate-assert-v1-1-ddf04d640569@linaro.org> X-B4-Tracking: v=1; b=H4sIAHAT5mkC/x3MQQqDMBAF0KvIrDsQU7XQq5QuxvqjUzBKJogg3 t3g8m3eQYakMHpXByVsarrEgvpR0W+SOIJ1KCbvfOea+sV/mWG8IgWWGJcsGSxWlszehdY7oH+ 2PZVgTQi63/nne54Xc1nxHGwAAAA= To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Annotate can open with an empty window if the disassembly tool fails. After the linked change, the TUI started assuming there was a current annotation line and could assert or segfault in the seek, refresh, and source-toggle paths. Handle empty annotate windows explicitly: set the asm entry count before resetting the browser, return early when refreshing an empty list, and ignore source line toggle when there is no current annotation line. Fixes the following when opening an annotation: perf: ui/browser.c:125: ui_browser__list_head_seek: Assertion `pos !=3D N= ULL' failed. Aborted Fixes: e201757f7a0a ("perf annotate: Fix source code annotate with objdump") Assisted-by: GitHub Copilot:GPT-5.4 Signed-off-by: James Clark Acked-by: Namhyung Kim --- tools/perf/ui/browser.c | 3 +++ tools/perf/ui/browsers/annotate.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c index dc88427b4ae5..321187b204d3 100644 --- a/tools/perf/ui/browser.c +++ b/tools/perf/ui/browser.c @@ -513,6 +513,9 @@ unsigned int ui_browser__list_head_refresh(struct ui_br= owser *browser) struct list_head *head =3D browser->entries; int row =3D 0; =20 + if (browser->nr_entries =3D=3D 0) + return 0; + if (browser->top =3D=3D NULL || browser->top =3D=3D browser->entries) browser->top =3D ui_browser__list_head_filter_entries(brow= ser, head->next); =20 diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/ann= otate.c index ea17e6d29a7e..0261cd922183 100644 --- a/tools/perf/ui/browsers/annotate.c +++ b/tools/perf/ui/browsers/annotate.c @@ -449,6 +449,9 @@ static bool annotate_browser__toggle_source(struct anno= tate_browser *browser, struct annotation_line *al; off_t offset =3D browser->b.index - browser->b.top_idx; =20 + if (browser->b.nr_entries =3D=3D 0) + return false; + browser->b.seek(&browser->b, offset, SEEK_CUR); al =3D list_entry(browser->b.top, struct annotation_line, node); =20 @@ -542,8 +545,8 @@ static void annotate_browser__show_full_location(struct= ui_browser *browser) static void ui_browser__init_asm_mode(struct ui_browser *browser) { struct annotation *notes =3D browser__annotation(browser); - ui_browser__reset_index(browser); browser->nr_entries =3D notes->src->nr_asm_entries; + ui_browser__reset_index(browser); } =20 static int sym_title(struct symbol *sym, struct map *map, char *title, --- base-commit: 841dbf4871c57ce2da18c4ea7ffac5487d0eda16 change-id: 20260417-james-perf-annotate-assert-20f520eeb35b Best regards, --=20 James Clark