Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • L linux
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Deployments
    • Deployments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • Kirill Smelkov
  • linux
  • Repository
  • linux
  • kernel
  • trace
  • ring_buffer.c
Find file BlameHistoryPermalink
  • Steven Rostedt (Google)'s avatar
    ring-buffer: Do not attempt to read past "commit" · 95a404bd
    Steven Rostedt (Google) authored Sep 07, 2023
    When iterating over the ring buffer while the ring buffer is active, the
    writer can corrupt the reader. There's barriers to help detect this and
    handle it, but that code missed the case where the last event was at the
    very end of the page and has only 4 bytes left.
    
    The checks to detect the corruption by the writer to reads needs to see the
    length of the event. If the length in the first 4 bytes is zero then the
    length is stored in the second 4 bytes. But if the writer is in the process
    of updating that code, there's a small window where the length in the first
    4 bytes could be zero even though the length is only 4 bytes. That will
    cause rb_event_length() to read the next 4 bytes which could happen to be off the
    allocated page.
    
    To protect against this, fail immediately if the next event pointer is
    less than 8 bytes from the end of the commit (last byte of data), as all
    events must be a minimum of 8 bytes anyway.
    
    Link: https://lore.kernel.org/all/20230905141245.26470-1-Tze-nan.Wu@mediatek.com/
    Link: https://lore.kernel.org/linux-trace-kernel/20230907122820.0899019c@gandalf.local.home
    
    
    
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Reported-by: default avatarTze-nan Wu <Tze-nan.Wu@mediatek.com>
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    95a404bd
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7