Hi, On Thu, Feb 1, 2024 at 5:22 PM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > On Thu, Feb 01, 2024 at 05:12:03PM -0800, Douglas Anderson wrote: > > While browsing through ChromeOS crash reports, I found one with an > > allocation failure that looked like this: > > > An order 7 allocation is (1 << 7) contiguous pages, or 512K. It's not > > a surprise that this allocation failed on a system that's been running > > for a while. > > > if (size > regset->n * regset->size) > > size = regset->n * regset->size; > > if (!p) { > > - to_free = p = kzalloc(size, GFP_KERNEL); > > + to_free = p = vmalloc(size); > > What the hell? Which regset could have lead to that? > It would need to have the total size of register in excess of > 256K. Seriously, which regset is that about? Note that we > have just made sure that size is not greater than that product. > size is unsigned int, so it's not as if a negative value passed > to function could get through that test only to be interpreted > as large positive later... > > Details, please. I can continue to dig more, but it is easy for me to reproduce this. On the stack is elf_core_dump() and it seems like we're getting a core dump of the chrome process. So I just arbitrarily look for the chrome GPU process: $ ps aux | grep gpu-process chronos 2075 3.0 1.1 34075552 95372 ? S<l 18:44 0:01 /opt/google/chrome/chrome --type=gpu-process ... Then I send it a quit: $ kill -quit 2075 I added some printouts for this allocation and there are a ton. Here's all of them, some of which are over 256K: [ 66.677393] DOUG: Allocating 272 bytes [ 66.688994] DOUG: Allocating 272 bytes [ 66.692921] DOUG: Allocating 528 bytes [ 66.696799] DOUG: Allocating 8 bytes [ 66.701058] DOUG: Allocating 272 bytes [ 66.704988] DOUG: Allocating 528 bytes [ 66.708875] DOUG: Allocating 8 bytes [ 66.712929] DOUG: Allocating 272 bytes [ 66.716845] DOUG: Allocating 528 bytes [ 66.720721] DOUG: Allocating 8 bytes [ 66.724752] DOUG: Allocating 272 bytes [ 66.728719] DOUG: Allocating 528 bytes [ 66.732621] DOUG: Allocating 8 bytes [ 66.736615] DOUG: Allocating 272 bytes [ 66.740584] DOUG: Allocating 528 bytes [ 66.744483] DOUG: Allocating 8 bytes [ 66.748507] DOUG: Allocating 272 bytes [ 66.752412] DOUG: Allocating 528 bytes [ 66.756328] DOUG: Allocating 8 bytes [ 66.760382] DOUG: Allocating 272 bytes [ 66.764356] DOUG: Allocating 528 bytes [ 66.768275] DOUG: Allocating 8 bytes [ 66.772236] DOUG: Allocating 272 bytes [ 66.776135] DOUG: Allocating 528 bytes [ 66.780013] DOUG: Allocating 8 bytes [ 66.787244] DOUG: Allocating 272 bytes [ 66.791175] DOUG: Allocating 528 bytes [ 66.795056] DOUG: Allocating 8 bytes [ 66.799101] DOUG: Allocating 272 bytes [ 66.803007] DOUG: Allocating 528 bytes [ 66.806930] DOUG: Allocating 8 bytes [ 66.810775] DOUG: Allocating 272 bytes [ 66.814668] DOUG: Allocating 528 bytes [ 66.818544] DOUG: Allocating 8 bytes [ 66.822409] DOUG: Allocating 272 bytes [ 66.826328] DOUG: Allocating 528 bytes [ 66.830258] DOUG: Allocating 8 bytes [ 66.834331] DOUG: Allocating 272 bytes [ 66.838510] DOUG: Allocating 528 bytes [ 66.842399] DOUG: Allocating 8 bytes [ 66.846301] DOUG: Allocating 272 bytes [ 66.850181] DOUG: Allocating 528 bytes [ 66.854051] DOUG: Allocating 8 bytes [ 66.857864] DOUG: Allocating 272 bytes [ 66.861745] DOUG: Allocating 528 bytes [ 66.865621] DOUG: Allocating 8 bytes [ 66.869495] DOUG: Allocating 272 bytes [ 66.873384] DOUG: Allocating 528 bytes [ 66.877261] DOUG: Allocating 8 bytes [ 66.892077] DOUG: Allocating 528 bytes [ 66.895978] DOUG: Allocating 16 bytes [ 66.899760] DOUG: Allocating 264 bytes [ 66.903624] DOUG: Allocating 264 bytes [ 66.907489] DOUG: Allocating 4 bytes [ 66.911184] DOUG: Allocating 279584 bytes [ 66.915392] DOUG: Allocating 8768 bytes [ 66.919354] DOUG: Allocating 65552 bytes [ 66.923415] DOUG: Allocating 64 bytes [ 66.927190] DOUG: Allocating 16 bytes [ 66.930968] DOUG: Allocating 8 bytes [ 66.934649] DOUG: Allocating 8 bytes [ 66.938332] DOUG: Allocating 528 bytes [ 66.942199] DOUG: Allocating 16 bytes [ 66.945970] DOUG: Allocating 264 bytes [ 66.949832] DOUG: Allocating 264 bytes [ 66.953702] DOUG: Allocating 4 bytes [ 66.957385] DOUG: Allocating 279584 bytes [ 66.961605] DOUG: Allocating 8768 bytes [ 66.965574] DOUG: Allocating 65552 bytes [ 66.969632] DOUG: Allocating 64 bytes [ 66.973405] DOUG: Allocating 16 bytes [ 66.977179] DOUG: Allocating 8 bytes [ 66.980862] DOUG: Allocating 8 bytes [ 66.984553] DOUG: Allocating 528 bytes [ 66.988416] DOUG: Allocating 16 bytes [ 66.992191] DOUG: Allocating 264 bytes [ 66.996046] DOUG: Allocating 264 bytes [ 66.999907] DOUG: Allocating 4 bytes [ 67.003590] DOUG: Allocating 279584 bytes [ 67.007773] DOUG: Allocating 8768 bytes [ 67.011732] DOUG: Allocating 65552 bytes [ 67.015789] DOUG: Allocating 64 bytes [ 67.019576] DOUG: Allocating 16 bytes [ 67.023366] DOUG: Allocating 8 bytes [ 67.027059] DOUG: Allocating 8 bytes [ 67.030753] DOUG: Allocating 528 bytes [ 67.034620] DOUG: Allocating 16 bytes [ 67.038402] DOUG: Allocating 264 bytes [ 67.042266] DOUG: Allocating 264 bytes [ 67.046144] DOUG: Allocating 4 bytes [ 67.049827] DOUG: Allocating 279584 bytes [ 67.054026] DOUG: Allocating 8768 bytes [ 67.057990] DOUG: Allocating 65552 bytes [ 67.062050] DOUG: Allocating 64 bytes [ 67.065826] DOUG: Allocating 16 bytes [ 67.069603] DOUG: Allocating 8 bytes [ 67.073285] DOUG: Allocating 8 bytes [ 67.076977] DOUG: Allocating 528 bytes [ 67.080836] DOUG: Allocating 16 bytes [ 67.084605] DOUG: Allocating 264 bytes [ 67.088461] DOUG: Allocating 264 bytes [ 67.092328] DOUG: Allocating 4 bytes [ 67.096015] DOUG: Allocating 279584 bytes [ 67.100214] DOUG: Allocating 8768 bytes [ 67.104182] DOUG: Allocating 65552 bytes [ 67.108245] DOUG: Allocating 64 bytes [ 67.112028] DOUG: Allocating 16 bytes [ 67.115804] DOUG: Allocating 8 bytes [ 67.119487] DOUG: Allocating 8 bytes [ 67.123168] DOUG: Allocating 528 bytes [ 67.127027] DOUG: Allocating 16 bytes [ 67.130806] DOUG: Allocating 264 bytes [ 67.134662] DOUG: Allocating 264 bytes [ 67.138527] DOUG: Allocating 4 bytes [ 67.142213] DOUG: Allocating 279584 bytes [ 67.146402] DOUG: Allocating 8768 bytes [ 67.150378] DOUG: Allocating 65552 bytes [ 67.154434] DOUG: Allocating 64 bytes [ 67.158209] DOUG: Allocating 16 bytes [ 67.161980] DOUG: Allocating 8 bytes [ 67.165665] DOUG: Allocating 8 bytes [ 67.169355] DOUG: Allocating 528 bytes [ 67.173219] DOUG: Allocating 16 bytes [ 67.176989] DOUG: Allocating 264 bytes [ 67.180847] DOUG: Allocating 264 bytes [ 67.184710] DOUG: Allocating 4 bytes [ 67.188385] DOUG: Allocating 279584 bytes [ 67.192569] DOUG: Allocating 8768 bytes [ 67.196522] DOUG: Allocating 65552 bytes [ 67.200570] DOUG: Allocating 64 bytes [ 67.204340] DOUG: Allocating 16 bytes [ 67.208109] DOUG: Allocating 8 bytes [ 67.211788] DOUG: Allocating 8 bytes [ 67.215468] DOUG: Allocating 528 bytes [ 67.219332] DOUG: Allocating 16 bytes [ 67.223108] DOUG: Allocating 264 bytes [ 67.226968] DOUG: Allocating 264 bytes [ 67.230834] DOUG: Allocating 4 bytes [ 67.234510] DOUG: Allocating 279584 bytes [ 67.238697] DOUG: Allocating 8768 bytes [ 67.242660] DOUG: Allocating 65552 bytes [ 67.246716] DOUG: Allocating 64 bytes [ 67.250487] DOUG: Allocating 16 bytes [ 67.254261] DOUG: Allocating 8 bytes [ 67.257955] DOUG: Allocating 8 bytes [ 67.261640] DOUG: Allocating 528 bytes [ 67.265497] DOUG: Allocating 16 bytes [ 67.269267] DOUG: Allocating 264 bytes [ 67.273131] DOUG: Allocating 264 bytes [ 67.277026] DOUG: Allocating 4 bytes [ 67.280721] DOUG: Allocating 279584 bytes [ 67.284914] DOUG: Allocating 8768 bytes [ 67.288868] DOUG: Allocating 65552 bytes [ 67.292927] DOUG: Allocating 64 bytes [ 67.296699] DOUG: Allocating 16 bytes [ 67.300479] DOUG: Allocating 8 bytes [ 67.304158] DOUG: Allocating 8 bytes [ 67.307848] DOUG: Allocating 528 bytes [ 67.311702] DOUG: Allocating 16 bytes [ 67.315469] DOUG: Allocating 264 bytes [ 67.319331] DOUG: Allocating 264 bytes [ 67.323196] DOUG: Allocating 4 bytes [ 67.326879] DOUG: Allocating 279584 bytes [ 67.331067] DOUG: Allocating 8768 bytes [ 67.335033] DOUG: Allocating 65552 bytes [ 67.339089] DOUG: Allocating 64 bytes [ 67.342866] DOUG: Allocating 16 bytes [ 67.346641] DOUG: Allocating 8 bytes [ 67.350323] DOUG: Allocating 8 bytes [ 67.354005] DOUG: Allocating 528 bytes [ 67.357869] DOUG: Allocating 16 bytes [ 67.361636] DOUG: Allocating 264 bytes [ 67.365492] DOUG: Allocating 264 bytes [ 67.369355] DOUG: Allocating 4 bytes [ 67.373040] DOUG: Allocating 279584 bytes [ 67.377218] DOUG: Allocating 8768 bytes [ 67.381179] DOUG: Allocating 65552 bytes [ 67.385228] DOUG: Allocating 64 bytes [ 67.389005] DOUG: Allocating 16 bytes [ 67.392784] DOUG: Allocating 8 bytes [ 67.396461] DOUG: Allocating 8 bytes [ 67.400150] DOUG: Allocating 528 bytes [ 67.404011] DOUG: Allocating 16 bytes [ 67.407792] DOUG: Allocating 264 bytes [ 67.411649] DOUG: Allocating 264 bytes [ 67.415506] DOUG: Allocating 4 bytes [ 67.419184] DOUG: Allocating 279584 bytes [ 67.423364] DOUG: Allocating 8768 bytes [ 67.427320] DOUG: Allocating 65552 bytes [ 67.431367] DOUG: Allocating 64 bytes [ 67.435146] DOUG: Allocating 16 bytes [ 67.438923] DOUG: Allocating 8 bytes [ 67.442602] DOUG: Allocating 8 bytes [ 67.446286] DOUG: Allocating 528 bytes [ 67.450143] DOUG: Allocating 16 bytes [ 67.453913] DOUG: Allocating 264 bytes [ 67.457775] DOUG: Allocating 264 bytes [ 67.461637] DOUG: Allocating 4 bytes [ 67.465323] DOUG: Allocating 279584 bytes [ 67.469501] DOUG: Allocating 8768 bytes [ 67.473463] DOUG: Allocating 65552 bytes [ 67.477511] DOUG: Allocating 64 bytes [ 67.481283] DOUG: Allocating 16 bytes [ 67.485056] DOUG: Allocating 8 bytes [ 67.488735] DOUG: Allocating 8 bytes [ 67.492428] DOUG: Allocating 528 bytes [ 67.496298] DOUG: Allocating 16 bytes [ 67.500072] DOUG: Allocating 264 bytes [ 67.503932] DOUG: Allocating 264 bytes [ 67.507803] DOUG: Allocating 4 bytes [ 67.511484] DOUG: Allocating 279584 bytes [ 67.515667] DOUG: Allocating 8768 bytes [ 67.519624] DOUG: Allocating 65552 bytes [ 67.523679] DOUG: Allocating 64 bytes [ 67.527447] DOUG: Allocating 16 bytes [ 67.531222] DOUG: Allocating 8 bytes [ 67.534907] DOUG: Allocating 8 bytes [ 67.538593] DOUG: Allocating 528 bytes [ 67.542458] DOUG: Allocating 16 bytes [ 67.546225] DOUG: Allocating 264 bytes [ 67.550090] DOUG: Allocating 264 bytes [ 67.553956] DOUG: Allocating 4 bytes [ 67.557634] DOUG: Allocating 279584 bytes [ 67.561818] DOUG: Allocating 8768 bytes [ 67.565775] DOUG: Allocating 65552 bytes [ 67.569823] DOUG: Allocating 64 bytes [ 67.573602] DOUG: Allocating 16 bytes [ 67.577380] DOUG: Allocating 8 bytes [ 67.581060] DOUG: Allocating 8 bytes [ 67.584748] DOUG: Allocating 528 bytes [ 67.588607] DOUG: Allocating 16 bytes [ 67.592384] DOUG: Allocating 264 bytes [ 67.596240] DOUG: Allocating 264 bytes [ 67.600105] DOUG: Allocating 4 bytes [ 67.603786] DOUG: Allocating 279584 bytes [ 67.607968] DOUG: Allocating 8768 bytes [ 67.611927] DOUG: Allocating 65552 bytes [ 67.615979] DOUG: Allocating 64 bytes [ 67.619757] DOUG: Allocating 16 bytes [ 67.623529] DOUG: Allocating 8 bytes [ 67.627216] DOUG: Allocating 8 bytes The above printouts were taken on a sc7180-trogdor-lazor device running mainline (roughly "Linux localhost 6.8.0-rc2") booted w/ ChromeOS userspace. If you need me to dig more into how coredumps work then I can see if I can track down exactly what part of the coredump is causing it to need the big allocation. "chrome" is a bit of a beast of an application, though. I'd also note that chrome makes extensive use of address space randomization which uses up huge amounts of virtual address space, so a shot in the dark is that maybe that has something to do with it? Looking at the virtual address space of Chrome in "top" shows stuff like: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2012 chronos 12 -8 32.7g 230520 160504 S 1.0 2.9 0:12.49 chrome 6044 chronos 12 -8 32.5g 95204 61888 S 1.0 1.2 0:05.90 chrome 2191 chronos 12 -8 107.0g 72200 51264 S 0.0 0.9 0:00.08 chrome -Doug