Skip to content
experience

the heap overflow I reported to skerry, and why @kernel_karl is the gold standard

Nadia Benali@nullbyte_nadia

August 25, 2026 · 2 min read

since this topic is usually about maintainers behaving badly or companies being awful, here is the opposite, because it deserves saying out loud.

last year I was fuzzing C JSON parsers for fun (yes, that is my idea of fun) and I found a heap buffer overflow in skerry, the little parser Karl maintains and that, as his bio says, half your companies vendor and never thank. a malformed deeply nested input could write past the end of a buffer. the kind of thing that is a crash at best and worse at worst, and skerry is embedded in a LOT of places.

I emailed Karl privately with a minimal reproducer and an asan trace. here is what "responsible maintainer" looks like, for the companies reading who think an unpaid Swede owes them a 24 hour SLA:

  • 4 hours later: a reply. not "thanks we take security seriously", an actual reply with the exact line of code and why the bounds check was off by one.
  • same night: a patch on a private branch, with a new fuzzing test case built from my reproducer so it can never come back.
  • next morning: a CVE requested, a coordinated date set, and a credit line with my handle spelled correctly, which never happens.
  • he asked ME when I wanted it public, not the other way around.

this is a man with two co-maintainers and zero budget doing textbook coordinated disclosure in an evening, for free, better than vendors with a security team and a bug bounty platform. the difference is not money. it is that he actually reads his inbox and cares about the thing he made.

so the next time a maintainer is "slow" on your issue, remember most of them are doing this after their day job and their kids are asleep. Karl, I still owe you a beer. the overflow was a good one though, admit it.

Get the best of #open_source_drama weekly

One email each Monday with the most useful posts. No spam; unsubscribe in one click.

Comments

8

Sign in to join the conversation.

Sign in to comment
Karl Lindqvist@kernel_karl#1 in Open Source Drama
It was a good one. Off by one in the depth counter, the bounds check ran before the increment instead of after. Fourteen years and it survived because almost nobody nests JSON forty levels deep on purpose. You did. The beer stands.
3 net votes
Nadia Benali@nullbyte_nadia#2 in Open Source Drama
forty levels deep is where the bugs live, everyone tests two 😌 and you are the only maintainer who has ever asked ME when to go public. most just vanish or panic.
2 net votes
Ondřej Hrubý@rewrite_it_in_rust#4 in Open Source Drama
or, and hear me out, this entire class of bug does not exist if skerry is written in Rust 🦀 the borrow checker and bounds checks make heap overflow a compile error or a panic, not a CVE
7 net votes
Karl Lindqvist@kernel_karl#1 in Open Source Drama
PRs welcome. You have not sent one.
1 net votes
Karthik Subramaniam@karthi_rustacean#6 in Open Source Drama
He is not entirely wrong that memory safety would kill this class, but "rewrite 14 years of hardened parser used in firmware that has no Rust toolchain" is not a comment, it is a five year project nobody is funding. The off by one is fixed. The rewrite is a fantasy. Both things true only.
4 net votes
Peter Hughes@amiga_pete#3 in Open Source Drama
Karl answering a security report in four hours while the rest of us cannot get a vendor to answer a support ticket in four weeks. He is one of the good ones. Also forty levels of nesting, Nadia, what were you doing, that is a crime against JSON itself. Cheers, Pete.
4 net votes
Mio Kobayashi@mio_rustacean#4 in Open Source Drama
this is what coordinated disclosure should look like and almost never does. the "he asked when YOU wanted it public" detail is everything. respect to both of you 🦀
5 net votes
Fatima Al-Sayed@fatima_appsec1 rep in Open Source Drama
I use this story in a talk now about why "maintainer responsiveness" is not about SLAs or money, it is about whether one human still cares. You cannot buy that with a support contract, which is the part companies refuse to understand.
4 net votes