Hello Steven Rostedt (Google),
Commit 5f3b6e839f3c ("ring-buffer: Validate boot range memory
events") from Jun 12, 2024 (linux-next), leads to the following
Smatch static checker warning:
kernel/trace/ring_buffer.c:1824 rb_meta_validate_events()
error: uninitialized symbol 'head_page'.
kernel/trace/ring_buffer.c
1751 static void rb_meta_validate_events(struct ring_buffer_per_cpu
*cpu_buffer)
1752 {
1753 struct ring_buffer_meta *meta = cpu_buffer->ring_meta;
1754 struct buffer_page *head_page;
1755 unsigned long entry_bytes = 0;
1756 unsigned long entries = 0;
1757 int ret;
1758 int i;
1759
1760 if (!meta || !meta->head_buffer)
1761 return;
1762
1763 /* Do the reader page first */
1764 ret = rb_validate_buffer(cpu_buffer->reader_page->page,
cpu_buffer->cpu);
1765 if (ret < 0) {
1766 pr_info("Ring buffer reader page is invalid\n");
1767 goto invalid;
head_page is uninitialized
1768 }
1769 entries += ret;
1770 entry_bytes +=
local_read(&cpu_buffer->reader_page->page->commit);
1771 local_set(&cpu_buffer->reader_page->entries, ret);
1772
1773 head_page = cpu_buffer->head_page;
1774
1775 /* If both the head and commit are on the reader_page then we
are done. */
1776 if (head_page == cpu_buffer->reader_page &&
1777 head_page == cpu_buffer->commit_page)
1778 goto done;
1779
1780 /* Iterate until finding the commit page */
1781 for (i = 0; i < meta->nr_subbufs + 1; i++,
rb_inc_page(&head_page)) {
1782
1783 /* Reader page has already been done */
1784 if (head_page == cpu_buffer->reader_page)
1785 continue;
1786
1787 ret = rb_validate_buffer(head_page->page,
cpu_buffer->cpu);
1788 if (ret < 0) {
1789 pr_info("Ring buffer meta [%d] invalid buffer
page\n",
1790 cpu_buffer->cpu);
1791 goto invalid;
1792 }
1793 entries += ret;
1794 entry_bytes += local_read(&head_page->page->commit);
1795 local_set(&cpu_buffer->head_page->entries, ret);
1796
1797 if (head_page == cpu_buffer->commit_page)
1798 break;
1799 }
1800
1801 if (head_page != cpu_buffer->commit_page) {
1802 pr_info("Ring buffer meta [%d] commit page not
found\n",
1803 cpu_buffer->cpu);
1804 goto invalid;
1805 }
1806 done:
1807 local_set(&cpu_buffer->entries, entries);
1808 local_set(&cpu_buffer->entries_bytes, entry_bytes);
1809
1810 pr_info("Ring buffer meta [%d] is from previous boot!\n",
cpu_buffer->cpu);
1811 return;
1812
1813 invalid:
1814 /* The content of the buffers are invalid, reset the meta data
*/
1815 meta->head_buffer = 0;
1816 meta->commit_buffer = 0;
1817
1818 /* Reset the reader page */
1819 local_set(&cpu_buffer->reader_page->entries, 0);
1820 local_set(&cpu_buffer->reader_page->page->commit, 0);
1821
1822 /* Reset all the subbuffers */
1823 for (i = 0; i < meta->nr_subbufs - 1; i++,
rb_inc_page(&head_page)) {
--> 1824 local_set(&head_page->entries, 0);
^^^^^^^^^
Uninitialized
1825 local_set(&head_page->page->commit, 0);
1826 }
1827 }
regards,
dan carpenter