Syspolicyd (Gatekeeper) infinite loop scanning Cursor Helper (Plugin) — 50%+ CPU

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

syspolicyd (Gatekeeper) infinite loop scanning Cursor Helper (Plugin) — 50%+ CPU

Steps to Reproduce

Reproduction:

  • macOS Sequoia, Apple M1 Max
  • Cursor open with extensions
  • syspolicyd enters infinite loop scanning
    /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/
  • Two threads re-checking same binary in parallel (stat64, access, getattrlist loop)
  • Killing syspolicyd doesn’t help — loop restarts immediately
  • Closing Cursor instantly resolves the issue
  • fs_usage trace attached

Expected Behavior

syspolicyd (macOS Gatekeeper daemon) should verify Cursor’s code signature once after launch and cache the result. Instead, it enters an infinite loop re-checking the same binary, consuming 50%+ CPU indefinitely.

Operating System

MacOS

Version Information

Cursor IDE 2.4.31
macOS 26.2 (Sequoia, build 25C56)
Apple M1 Max, 32GB RAM

Additional Information

fs_usage trace shows syspolicyd stuck in an infinite loop scanning:
/Applications/Cursor.app/Contents/Frameworks/Cursor Helper
(Plugin).app/Contents/MacOS/Cursor Helper (Plugin)

Two threads (.577874 and .579272) perform identical operations in parallel:
stat64 → access → getattrlist → statfs64 → repeat

The loop persists across syspolicyd restarts (sudo killall syspolicyd).
Closing Cursor instantly resolves the issue — syspolicyd drops to 0% CPU.

Raw fs_usage trace (first 80 lines):

17:10:11.931307 stat64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000033 syspolicyd.579272
17:10:11.931478 access (R___) /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000146 syspolicyd.579272
17:10:11.931541 getattrlist /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000024 syspolicyd.579272
17:10:11.931571 stat64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000012 syspolicyd.579272
17:10:11.931689 stat64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000020 syspolicyd.577874
17:10:11.931690 getattrlist [ 20] /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)/Wrapper 0.000015 syspolicyd.579272
17:10:11.931757 stat64 [ 20] /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)/Wrapper 0.000011 syspolicyd.579272
17:10:11.931778 statfs64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000014 syspolicyd.579272
17:10:11.931814 stat64 /dev/disk3s5 0.000031 syspolicyd.579272
17:10:11.931826 access (R___) /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000123 syspolicyd.577874
17:10:11.931833 getattrlist /System/Volumes/Data 0.000018 syspolicyd.579272
17:10:11.931862 getattrlist /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000015 syspolicyd.577874
17:10:11.931872 getattrlist /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000018 syspolicyd.579272
17:10:11.931887 stat64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000013 syspolicyd.577874
17:10:11.931925 getattrlist /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000044 syspolicyd.579272
17:10:11.931968 getattrlist [ 20] /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)/Wrapper 0.000013 syspolicyd.577874
17:10:11.932020 stat64 [ 20] /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)/Wrapper 0.000011 syspolicyd.577874
17:10:11.932037 statfs64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000010 syspolicyd.577874
17:10:11.932056 stat64 /dev/disk3s5 0.000015 syspolicyd.577874
17:10:11.932069 getattrlist /System/Volumes/Data 0.000012 syspolicyd.577874
17:10:11.932101 getattrlist /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000016 syspolicyd.577874
17:10:11.932116 fcntl F=14 <OFD_SETLK> 0.000010 syspolicyd.579272
17:10:11.932122 fcntl F=14 <OFD_SETLK> 0.000005 syspolicyd.579272
17:10:11.932125 fcntl F=14 <OFD_SETLK> 0.000002 syspolicyd.579272
17:10:11.932140 getattrlist /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000032 syspolicyd.577874
17:10:11.932204 fcntl F=14 <OFD_SETLK> 0.000007 syspolicyd.579272
17:10:11.932285 getattrlist /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000014 syspolicyd.579272
17:10:11.932307 stat64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000012 syspolicyd.579272
17:10:11.932328 statfs64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000009 syspolicyd.579272
17:10:11.932767 fcntl F=14 <OFD_SETLK> 0.000006 syspolicyd.577874
17:10:11.933279 stat64 /Applications/Cursor.app 0.000023 syspolicyd.579272
17:10:11.933316 fcntl F=14 <OFD_SETLK> 0.000007 syspolicyd.577874
17:10:11.933331 getattrlist /Applications/Cursor.app 0.000013 syspolicyd.579272
17:10:11.933346 stat64 /Applications/Cursor.app 0.000008 syspolicyd.579272
17:10:11.933384 getattrlist /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000017 syspolicyd.577874
17:10:11.933405 getattrlist [ 2] /Applications/Cursor.app/Wrapper 0.000006 syspolicyd.579272
17:10:11.933409 stat64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000014 syspolicyd.577874
17:10:11.933430 stat64 [ 2] /Applications/Cursor.app/Wrapper 0.000005 syspolicyd.579272
17:10:11.933434 statfs64 /Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin) 0.000012 syspolicyd.577874
17:10:11.933444 statfs64 /Applications/Cursor.app 0.000010 syspolicyd.579272
17:10:11.933472 stat64 /dev/disk3s5 0.000024 syspolicyd.579272
17:10:11.933489 getattrlist /System/Volumes/Data 0.000016 syspolicyd.579272
17:10:11.933516 getattrlist /Applications/Cursor.app 0.000011 syspolicyd.579272
17:10:11.933532 stat64 /Applications/Cursor.app 0.000011 syspolicyd.577874
17:10:11.933561 getattrlist /Applications/Cursor.app 0.000038 syspolicyd.579272
17:10:11.933568 getattrlist /Applications/Cursor.app 0.000010 syspolicyd.577874
17:10:11.933582 stat64 /Applications/Cursor.app 0.000009 syspolicyd.577874
17:10:11.933632 getattrlist [ 2] /Applications/Cursor.app/Wrapper 0.000006 syspolicyd.577874
17:10:11.933655 stat64 [ 2] /Applications/Cursor.app/Wrapper 0.000005 syspolicyd.577874
17:10:11.933665 statfs64 /Applications/Cursor.app 0.000007 syspolicyd.577874
17:10:11.933687 stat64 /dev/disk3s5 0.000018 syspolicyd.577874
17:10:11.933701 getattrlist /System/Volumes/Data 0.000012 syspolicyd.577874
17:10:11.933724 open F=16 (R_____N____X___) /Applications/Cursor.app 0.000137 syspolicyd.579272
17:10:11.933737 getattrlist /Applications/Cursor.app 0.000013 syspolicyd.577874
17:10:11.933771 getattrlist /Applications/Cursor.app 0.000027 syspolicyd.577874
17:10:11.933898 open F=17 (R_____N____X___) /Applications/Cursor.app 0.000108 syspolicyd.577874
17:10:11.933909 fstatfs64 F=17 0.000010 syspolicyd.577874
17:10:11.933965 fstatfs64 F=16 0.000004 syspolicyd.579272
17:10:11.933980 getdirentries64 F=17 B=0x68 0.000034 syspolicyd.577874
17:10:11.933992 close F=17 0.000005 syspolicyd.577874
17:10:11.933992 getdirentries64 F=16 B=0x68 0.000025 syspolicyd.579272
17:10:11.934009 close F=16 0.000005 syspolicyd.579272
17:10:11.934133 open F=16 (R_____N____X___) /Applications/Cursor.app/Contents 0.000112 syspolicyd.577874
17:10:11.934138 fstatfs64 F=16 0.000004 syspolicyd.577874
17:10:11.934147 open F=17 (R_____N____X___) /Applications/Cursor.app/Contents 0.000113 syspolicyd.579272
17:10:11.934152 fstatfs64 F=17 0.000004 syspolicyd.579272
17:10:11.934180 getdirentries64 F=16 B=0x148 0.000037 syspolicyd.577874
17:10:11.934192 getdirentries64 F=17 B=0x148 0.000038 syspolicyd.579272
17:10:11.934196 close F=16 0.000003 syspolicyd.577874
17:10:11.934211 close F=17 0.000004 syspolicyd.579272
17:10:11.934319 open F=16 (R_____N________) /Applications/Cursor.app/Contents/Info.plist 0.000109 syspolicyd.577874
17:10:11.934324 fstat64 F=16 0.000004 syspolicyd.577874
17:10:11.934332 open F=17 (R_____N________) /Applications/Cursor.app/Contents/Info.plist 0.000108 syspolicyd.579272
17:10:11.934336 fstat64 F=17 0.000003 syspolicyd.579272
17:10:11.934414 read F=17 B=0x9953 0.000076 syspolicyd.579272
17:10:11.934417 close F=17 0.000003 syspolicyd.579272
17:10:11.934436 read F=16 B=0x9953 0.000109 syspolicyd.577874
17:10:11.934442 close F=16 0.000006 syspolicyd.577874
17:10:11.936966 fcntl F=14 <OFD_SETLK> 0.000010 syspolicyd.577874
17:10:11.937038 fcntl F=14 <OFD_SETLK> 0.000005 syspolicyd.577874

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

Hey, thanks for the detailed report and the fs_usage trace.

A couple things you can try:

  1. Remove the quarantine flag (this is a common cause of Gatekeeper re-checking in a loop on Sequoia):

    sudo xattr -rd com.apple.quarantine /Applications/Cursor.app
    
  2. If that doesn’t help, check what the Gatekeeper assessment returns:

    spctl --assess -vvvv /Applications/Cursor.app/Contents/Frameworks/Cursor\ Helper\ \(Plugin\).app
    

By the way, does this happen on every launch, or only sometimes?

I’ve passed this along to the team. Let me know how it goes.