| From: | Amul Sul <sulamul(at)gmail(dot)com> |
|---|---|
| To: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Cc: | Amit Langote <amitlangote09(at)gmail(dot)com> |
| Subject: | Server crash: Use-after-free in AfterTriggerEndQuery() |
| Date: | 2026-05-05 06:37:19 |
| Message-ID: | CAAJ_b95p6-qiVpE2Gpr=bUsNAqTcejD_rPgLnfjx9m=fo3Rf3Q@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi,
The crash occurs when the per-query firing loop in
AfterTriggerEndQuery() exits via the "all fired" path. If
afterTriggerInvokeEvents() reallocated query_stack while firing, the
loop's local qs pointer is left dangling, and the subsequent
FireAfterTriggerBatchCallbacks(qs->batch_callbacks) reads
batch_callbacks from the freed memory and crashes.
Here is the reproducible test that has an AFTER INSERT trigger on a
referenced table that recursively inserts rows into itself:
--
create table trigger_recursive_pk (id int primary key);
create table trigger_recursive_fk (id int references trigger_recursive_pk(id));
insert into trigger_recursive_pk select g from generate_series(1, 15) g;
create function trigger_recursive_fn() returns trigger language plpgsql as $$
begin
if new.id < 10 then
insert into trigger_recursive_fk values (new.id + 1);
end if;
return new;
end$$;
create trigger trigger_recursive after insert on trigger_recursive_fk
for each row execute function trigger_recursive_fn();
insert into trigger_recursive_fk values (1);
--
The attached patch fixes the reported issue by recomputing qs
immediately before calling FireAfterTriggerBatchCallbacks().
--
Regards,
Amul Sul
EDB: http://www.enterprisedb.com
| Attachment | Content-Type | Size |
|---|---|---|
| 0001-Fix-use-after-free-of-qs-in-AfterTriggerEndQuery.patch | application/x-patch | 4.6 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | John Naylor | 2026-05-05 07:15:37 | Re: [PATCH] Fix duplicate errmsg in ALTER TABLE SPLIT PARTITION |
| Previous Message | Bertrand Drouvot | 2026-05-05 06:00:23 | Re: Fix DROP PROPERTY GRAPH "unsupported object class" error |