Joined February 2009
750 Photos and videos
Almost Summer Sale 2026: All my flagship video courses discounted until end of May! Plus *free* Exadata Internals & Advanced Performance Metrics seminar videos! tanelpoder.com/posts/almost-โ€ฆ
1
2
16
1,223
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
You can have managed, serverless MCP Servers for your Oracle AI Databases in the Cloud These enable you to talk to your database But for critical reports you may want verified #SQL @thatjeffsmith shows how to use predefined reports with the MCP server thatjeffsmith.com/archive/20โ€ฆ
5
11
1,119
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
Welp, that happened faster than I predicted. Thought it would be end of 2027, then early 2027, but agentic traffic growing so fast that bots have now passed human traffic online for the first time in the Internet's history. radar.cloudflare.com/trafficโ€ฆ
388
2,170
8,317
2,241,160
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
Jun 2
someone made a fork of opencode that routes through the unsecured ai endpoints from chipotle
207
627
11,950
2,375,926
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
Turns out that I had dreamed up the database version when the scalable LMT "space header" feature was introduced. It was introduced already in 12c, with the "_enable_12g_bft" parameter - enable 12g bigfile tablespace. When upgrading from an earlier version to 12c , you still had to create a new tablespace with this setting was enabled (old ones do not get converted to the new scalable LMT space management). The space header block (#2) now shows "KTFBN File Space Header" (not KTFB). I guess the N means "new". Kun Sun has written an article about another issue, but covers the differences of old vs new 12c bigfile tablespace headers here: ksun-oracle.blogspot.com/202โ€ฆ

1
9
722
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
But now I can't find the article, I hope I didn't read it in my dreams or something ๐Ÿ˜… Related, the old way is described here (the block#=2 in each datafile was the single LMT space management *header* block per file): tanelpoder.com/2013/11/06/diโ€ฆ

1
1
4
1,054
Question for fellow Oracle nerds: I'm sure I saw a post recently about an Oracle 23/26 enhancement for more scalable LMT bigfile tablespace space management. Something like where now there can be multiple "KTFB Bitmapped File Space Header" blocks, instead of just one header block
1
3
929
But now I can't find the article, I hope I didn't read it in my dreams or something ๐Ÿ˜… Related, the old way is described here (the block#=2 in each datafile was the single LMT space management *header* block per file): tanelpoder.com/2013/11/06/diโ€ฆ

1
1
4
1,054
Turns out that I had dreamed up the database version when the scalable LMT "space header" feature was introduced. It was introduced already in 12c, with the "_enable_12g_bft" parameter - enable 12g bigfile tablespace. When upgrading from an earlier version to 12c , you still had to create a new tablespace with this setting was enabled (old ones do not get converted to the new scalable LMT space management). The space header block (#2) now shows "KTFBN File Space Header" (not KTFB). I guess the N means "new". Kun Sun has written an article about another issue, but covers the differences of old vs new 12c bigfile tablespace headers here: ksun-oracle.blogspot.com/202โ€ฆ

1
9
722
I wont forget to pitch my xtop TUI tool (for eBPF xcapture output analysis) as well! tanelpoder.com/posts/xcapturโ€ฆ
4
601
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
Solving the Identity Crisis for AI Agents uber.com/us/en/blog/solving-โ€ฆ
1
6
797
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
It's a gorgeous and funny bug. Fwiw, I'm the biggest eBPF fanatic, but I don't think unprivileged users should be able to load arbitrary eBPF programs.
found a verifier/interpreter mismatch in the Linux BPF subsystem (CVE-2026-31525, CVSS 7.8). arbitrary kernel read/write; become root, escape containers, disable SELinux, read TLS keys out of other processes' memory. anyway, it starts with the math bars, the absolute value. computers store negative numbers in two's complement. the smallest 32-bit signed integer is -2,147,483,648, and the largest positive is 2,147,483,647. there is no 2,147,483,648, since it simply does not fit. so when you call abs(-2,147,483,648), the C specification thinks about it for a moment, says "undefined," and leaves the room. on x86 and arm64, what you actually get back is -2,147,483,648. you asked for the absolute value of a negative number, you got back the same negative number. thank you computer :D the BPF interpreter implements signed 32-bit division (BPF_ALU | BPF_DIV/MOD, off == 1, added in ec0e2da95f72) by decomposing it into unsigned division: take abs() of both operands, divide via do_div(), reapply the sign. the handler in ___bpf_prog_run (kernel/bpf/core.c): AX = abs((s32)DST); AX = do_div(AX, abs((s32)SRC)); and look, the kernel even documents this. include/linux/math.h: "the return value is undefined when the input is the minimum value of the type." when DST = 0x80000000 (S32_MIN), abs() tries to negate it. -(-2,147,483,648) overflows s32, the C spec calls it undefined behavior, and the CPU hands back 0x80000000 unchanged. still negative. abs() had one job. this s32 then gets assigned into AX, a u64 BPF register. s32 โ†’ u64 sign-extends: 0x80000000 becomes 0xFFFFFFFF80000000. that's 18,446,744,071,562,067,968. you wanted 2,147,483,648, you got 18.4 quintillion; a rounding error of about 18.4 quintillion. do_div() is a 64-by-32-bit unsigned division macro and it operates on this full u64 numerator. the quotient is off by a factor of 2ยณยฒ. the smod path has the same problem since do_div() modifies the dividend in place and returns the remainder, both wrong. 8 call sites across sdiv32/smod32 src/imm handlers, all quietly producing nonsense whenever S32_MIN shows up. the BPF verifier is the safety system that statically analyzes every BPF program before allowing it to run. it exists specifically to guarantee that nothing bad can happen. scalar32_min_max_sdiv() in kernel/bpf/verifier.c tracks value ranges through abstract interpretation. it handles signed division correctly, including S32_MIN. computes tight, mathematically correct bounds. the interpreter, as we've established, computes whatever it feels like. so the verifier thinks register R0 is in range X. the interpreter puts value Y in R0. the safety system and the execution engine disagree about what a program does. in BPF security research, this is where you set down your coffee. concretely: load S32_MIN into R1, load 2 into R2, execute SDIV32 R1 R2. verifier determines R1 โˆˆ [-1,073,741,824, -1,073,741,824]. interpreter computes do_div(0xFFFFFFFF80000000, 2) = 0x7FFFFFFFC0000000, reapplies the sign, produces a completely unrelated value. use R1 as an index into a BPF map. verifier approves the access, bounds check passes against its calculated range. interpreter uses the actual value. out-of-bounds read/write on a kernel data structure. on every Linux machine running the BPF interpreter. the root cause of all of this: the absolute value function doesn't handle one number. one specific number, out of 4.2 billion possible inputs, and it's the one that gives you kernel read/write. the fix is: c static u32 abs_s32(s32 x) { return x >= 0 ? (u32)x : -(u32)x; } cast to u32 before negating. -(u32)0x80000000 = 0x80000000 unsigned. correct absolute value, no overflow, no undefined behavior. the kind of function you'd assume already exists somewhere in 30 million lines of kernel code. it did not. I got to write it. :D I reported this, wrote the patch, got it through 5 revisions of review. acked by Yonghong Song and Mykyta Yatsenko. now patched in stable 6.6, 6.12, 6.18, 6.19. if you haven't updated your kernel: maybe do that.
7
24
156
25,502
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
Codex just found a โ€œworkaroundโ€ of not having sudo on my pcโ€ฆ
343
1,113
16,278
1,603,192
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
Combining deep math theory with practical implementation leads to many cool things. This is the heart-and-soul of computer science and engineering. AWSs latest blog is a beautiful example, describing and visualizing the transformation from tree-based networks to pseudo-random graphs in their DCs. Props to @ratulm and the other authors (who need to get on X dot com ASAP)
7
25
456
25,563
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
May 27
At our last #P99CONF, @tanelpoder launched the prod/GA ready version of xCapture v3 xtop and demonstrated how it helps with real life troubleshooting scenarios. Watch the entire session for free: ow.ly/QfGR50XpsSN #ScyllaDB
1
6
606
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
Rust promises zero-cost abstractions. But how well does it actually deliver? ๐Ÿฆ€ Two researchers dug deep, studying the compiler, modifying it, and collecting real performance data for a talk at C Russia 2026. 150 slides covering Rust's performance trade-offs in a systematic, data-driven way. Possibly the most comprehensive treatment of the topic to date. Slides repo: ๐Ÿ”— github.com/yugr/rust-slides/ #Rust #RustLang #SystemsProgramming #Performance #Compilers #CPlusPlus
12
77
687
68,851
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
A little script and some background information on how to extract v$ definitions directly from the oracle binary. t.ly/NT6L7
1
4
6
814
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
Check string similarity in Oracle AI Database 26ai with FUZZY_MATCH ( <algo>, <str1>, <str2> ) By default the result is scaled 0-100 (no-full match) Algorithms include Levenshtein Jaro-Winkler Bigram/Trigram Longest common substring Try it on FreeSQL freesql.com/?compressed_codeโ€ฆ
9
18
1,204
Tanel Poder ๐Ÿ‡บ๐Ÿ‡ฆ retweeted
The most valuable asset you can invest in as a software engineer is: - Understanding The more you understand, the deeper your understanding, the greater your impact. This means crafting โ€œone level deeperโ€, thinking more. It may take years, but understanding will reward you.
People never paid you: - for the time it took to write the code, - but for the value you created. Focus on tools that improve quality and value in the software you ship.
14
49
439
30,749