- Notifications
You must be signed in to change notification settings - Fork5
Commite7a4561
committed
Fix core dump in ReorderBufferRestoreChange on alignment-picky platforms.
When re-reading an update involving both an old tuple and a new tuple fromdisk, reorderbuffer.c was careless about whether the new tuple is suitablyaligned for direct access --- in general, it isn't. We'd missed seeingthis in the buildfarm because the contrib/test_decoding tests exercise thiscode path only a few times, and by chance all of those cases have oldtuples with length a multiple of 4, which is usually enough to make theaccess to the new tuple's t_len safe. For some still-not-entirely-clearreason, however, Debian's sparc build gets a bus error, as reported byChristoph Berg; perhaps it's assuming 8-byte alignment of the pointer?The lack of previous field reports is probably because you need all ofthese conditions to trigger a crash: an alignment-picky platform (notIntel), a transaction large enough to spill to disk, an update withinthat xact that changes a primary-key field and has an odd-length old tuple,and of course logical decoding tracing the transaction.Avoid the alignment assumption by using memcpy instead of fetching t_lendirectly, and add a test case that exposes the crash on picky platforms.Back-patch to 9.4 where the bug was introduced.Discussion: <20160413094117.GC21485@msg.credativ.de>1 parentce47112 commite7a4561
File tree
3 files changed
+28
-9
lines changed- contrib/test_decoding
- expected
- sql
- src/backend/replication/logical
3 files changed
+28
-9
lines changedLines changed: 14 additions & 7 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
227 | 227 |
| |
228 | 228 |
| |
229 | 229 |
| |
| 230 | + | |
| 231 | + | |
230 | 232 |
| |
231 | 233 |
| |
232 | 234 |
| |
233 | 235 |
| |
234 | 236 |
| |
235 | 237 |
| |
236 |
| - | |
237 |
| - | |
238 |
| - | |
239 |
| - | |
240 |
| - | |
241 |
| - | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
242 | 245 |
| |
243 | 246 |
| |
244 | 247 |
| |
245 | 248 |
| |
246 | 249 |
| |
| 250 | + | |
| 251 | + | |
247 | 252 |
| |
248 | 253 |
| |
249 | 254 |
| |
| |||
253 | 258 |
| |
254 | 259 |
| |
255 | 260 |
| |
256 |
| - | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
257 | 264 |
| |
258 | 265 |
| |
259 | 266 |
| |
|
Lines changed: 4 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
115 | 115 |
| |
116 | 116 |
| |
117 | 117 |
| |
| 118 | + | |
| 119 | + | |
118 | 120 |
| |
119 | 121 |
| |
120 | 122 |
| |
| |||
127 | 129 |
| |
128 | 130 |
| |
129 | 131 |
| |
| 132 | + | |
| 133 | + | |
130 | 134 |
| |
131 | 135 |
| |
132 | 136 |
| |
|
Lines changed: 10 additions & 2 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
2347 | 2347 |
| |
2348 | 2348 |
| |
2349 | 2349 |
| |
| 2350 | + | |
| 2351 | + | |
| 2352 | + | |
| 2353 | + | |
2350 | 2354 |
| |
2351 | 2355 |
| |
2352 | 2356 |
| |
| |||
2374 | 2378 |
| |
2375 | 2379 |
| |
2376 | 2380 |
| |
2377 |
| - | |
| 2381 | + | |
2378 | 2382 |
| |
2379 | 2383 |
| |
2380 | 2384 |
| |
| |||
2395 | 2399 |
| |
2396 | 2400 |
| |
2397 | 2401 |
| |
2398 |
| - | |
| 2402 | + | |
| 2403 | + | |
| 2404 | + | |
| 2405 | + | |
| 2406 | + | |
2399 | 2407 |
| |
2400 | 2408 |
| |
2401 | 2409 |
| |
|
0 commit comments
Comments
(0)