Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. OpenJev(openjev.com ↗)
    7comments
  2. Jemalloc 5.4.0(github.com/jemalloc ↗)
    44comments
  3. The scourge of x86 emulation(fex-emu.com ↗)
    26comments
  4. Astra for Law(openai.com ↗)
    564comments
  5. Bonsai 2 27B: Near-Lossless Compression in a 9x Smaller Footprint(prismml.com ↗)
    133comments
  6. Bend – A language that blocks AI mistakes via proof, on CPU and GPU(bend-lang.com ↗)
    222comments
  7. Qwen 3.8 Omni Flash(qwen.ai ↗)
    81comments
  8. Hister: A private search engine for the pages you visit and the files you keep(github.com/asciimoo ↗)
    169comments
  9. Pre-Greek: The lost language hidden within Ancient Greek(linguisticdiscovery.com ↗)
    34comments
  10. Wax motor(wikipedia.org ↗)
    70comments
  11. When the fractional part of a float fixes your shader(crocidb.com ↗)
    1comments
  12. Fujitsu launches made-in-Japan next-generation CPU FUJITSU-MONAKA(global.fujitsu ↗)
    232comments
  13. A heap overflow and SSO misconfiguration to compromise OpenAI internal repos(hacktron.ai ↗)
    155comments
  14. Shapelearn Qwen 3.8 27B (13.1 GB VRAM)(byteshape.com ↗)
    11comments
  15. Replacing Pull Requests with Delta(zed.dev ↗)
    2comments
  16. How to Write with an LLM(sockpuppet.org ↗)
    100comments
  17. Ask A Monk – A digital wilderness for thoughts with no immediate answer(askamonk.online ↗)
    24comments
  18. Microsoft exec called AI scraping 'the largest theft of labor in human history'(techcrunch.com ↗)
    6comments
  19. Why Does the Universe Expand?(cosmicave.org ↗)
    56comments
  20. Speeding up gearhash on ARM64(sam.dev ↗)
    discuss
  21. Telstra outage: The night a network decided the year was 2006(netnod.se ↗)
    26comments
  22. Flet 1.0 – Build cross-platform apps in Python(flet.dev ↗)
    58comments
  23. Diplodocus, Long Thought Exclusively American, Turns Up in Spain(sci.news ↗)
    41comments
  24. Why I didn’t sign the Fields medallists’ letter(gowers.wordpress.com ↗)
    369comments
  25. How do we prevent mathemathics from devolving into the Medieval Era of secrecy?(mathoverflow.net ↗)
    107comments
  26. Apple detectives solved mystery of ancient tree and rewrote the history of fruit(scientificamerican.com ↗)
    11comments
  27. The most important product decision is what you don't build(liamnugent.me ↗)
    39comments
  28. CrowdSec Source Code Leak(crowdsec.net ↗)
    49comments
  29. Fixing an NZXT Signal 4K30 part 2: the green/pink video bug(downtowndougbrown.com ↗)
    10comments
  30. How Uber Protects Against Retry Storms(uber.com ↗)
    42comments

Flipping Bits in Memory Without Accessing Them [pdf]

31 pointsby 11y agousers.ece.cmu.edu
3 comments
11y agoHN ↗

The tl;dr of this is: DDR3 DRAM modules are not as reliable as once thought, and all the ones from 2012 and 2013 that they tested showed errors when exercised with the right access patterns.

What isn't mentioned is whether these would be the types of errors that the usual memory testers like MemTest86 could detect --- but based on the lack of any significant news stories in the past 2 years, I'd guess not. Perhaps this could explain why a lot of people who encountered weird hardware-ish problems could run MemTest with no errors but still crash with the right workload.

Their dismissal of one of the "potential solutions" is a bit of a WTF:

Manufacturers could fix the problem at the chip-level by improving circuit design. However, the problem could resurface when the process technology is upgraded. In addition, this may get worse in the future as cells become smaller and more vulnerable.

As their tests show, modules from 2008 and '09 are basically perfect, and most of the ones from '10 too. Why could this change in process even be called an "upgrade" if it results in memory that doesn't behave anymore like memory should? To me, it's clearly a serious flaw. Their "workaround" proposal of adding more complexity to the memory controller, and which doesn't actually guarantee a solution, just feels... wrong.

I think this is all really quite scary - programmers are used to, and all software depends on, memory as something whose contents should not ever change without being written to! While the majority of access patterns won't trigger this flaw, the one that does could have significant cascading effects. This paper really should get more exposure to the public.

11y agoHN ↗

Nice review. This is a good paper, and I found it worth reading just for the clear explanation of how DDR3 memory actually works. Maybe one of these times I'll finally learn it well enough to remember which is a rank and which is a bank.

Why could this change in process even be called an "upgrade" if it results in memory that doesn't behave anymore like memory should?

I wasn't sure from the paper, but I think they were testing memory of different scale (nm). At least, the majority of the chips with no errors were 1 GB, and the majority of the chips with errors were 2 GB. It's an improvement because the smaller scale allows higher densities and more storage per chip.

More explanation about the "row hammer" issue is here:

http://forums.xilinx.com/t5/Xcell-Daily-Blog/Unexplained-mem...

the usual memory testers like MemTest86 could detect

Historically no, but the MemTest86 6.0 from a couple months ago added the "Hammer Test" a couple months ago, citing this paper.

I think this is all really quite scary - programmers are used to, and all software depends on, memory as something whose contents should not ever change without being written to!

I agree. From the paper, the strong implication is that a user running unprivileged code on any modern computer can corrupt memory outside of their process. Perhaps even with asm.js? Comments in the release announcement thread suggest, thouth, that although the problem is real, the paper is a bit alarmist about the prevalence: http://www.passmark.com/forum/showthread.php?4836-MemTest86-...

11y agoHN ↗

It's an improvement because the smaller scale allows higher densities and more storage per chip.

Yes, that's the usual explanation but I don't think it makes much sense here since the ostensibly "better" memory can produce visible errors that the older generation didn't. I see the word "tradeoff" being used often in situations like this but I don't agree that this is, since at some point on the reliability scale it just stops being memory completely and devolves into some weird approximation of it.

From the paper, the strong implication is that a user running unprivileged code on any modern computer can corrupt memory outside of their process

Indeed, that's the big message I get: a tiny and innocuous-looking piece of code can easily corrupt memory. I'm not someone who believes in conspiracy theories much, but this looks like an amazingly good backdoor or constituent of one to me. If memory controllers implement workarounds such as the one described in the paper to reduce these types of errors, they also naturally will have options to turn them off for testing/debugging purposes, etc. For the great majority of the time if they are turned off nothing unusual will be noticeable, but then the system becomes vulnerable to the specific access patterns that trigger the fault. Since the documentation on the latest memory controllers is largely kept secret, a firmware update that silently changes this setting wouldn't raise much concern - memory initialisation code usually uses lots of undocumented registers and values anyway. Then all it takes is a tiny piece of user-level code (possibly obfuscated/concealed in some other mundane application), maybe with some cooperation/knowledge of how the OS's VM mapping works, to enable relatively precise corruption of certain addresses in memory. Although largely (publicly) undocumented, it wouldn't be so difficult to reverse-engineer the row<>address mappings either. The results could range from DoS to bypassing access controls, depending on what gets targeted.

The subtle nature of this approach is what makes it all the more scarier; the access patterns that trigger it aren't so unusual, and it's just reading from memory. I doubt it can be easily triggered (never say never...) from compiled languages like JS but virtualised environments appear vulnerable (unless the hypervisor constantly moves the pages around, incurring a significant performance penalty).

although the problem is real, the paper is a bit alarmist about the prevalence

The paper assumes exactly knowledge of the row<>address mappings and hammered the DRAM with that, whereas MemTest's implementation might not know the exact mapping used by a particular controller+configuration. Their estimate is 5-20% (a huge range), under "less optimal" hammering, which is still cause for concern.