# HG changeset patch # User Paul Boddie # Date 1708648190 -3600 # Node ID a8f1dba0cd6ac7144f6c82ab93caa47ed23f1f07 # Parent a69c995955567a408deac2db5c3175d0973411a3 Fixed the freeing of unused reserved capabilities. diff -r a69c99595556 -r a8f1dba0cd6a libipc/include/ipc/util_ipc.h --- a/libipc/include/ipc/util_ipc.h Sun Feb 18 01:36:59 2024 +0100 +++ b/libipc/include/ipc/util_ipc.h Fri Feb 23 01:29:50 2024 +0100 @@ -40,7 +40,7 @@ void _export_capability(l4_msgtag_t tag, l4_msg_regs_t *mregs, int item, l4_cap_idx_t ref); void _export_fpage(l4_msgtag_t tag, l4_msg_regs_t *mregs, int item, l4_snd_fpage_t fpage); void _export_page(l4_msgtag_t tag, l4_msg_regs_t *mregs, int item, l4_umword_t hot_spot, l4_fpage_t fpage); -void _free_expected_capabilities(l4_buf_regs_t *bregs, int number); +void _free_expected_capabilities(l4_buf_regs_t *bregs, int start, int limit); long _import_capability(l4_msgtag_t tag, l4_buf_regs_t *bregs, l4_msg_regs_t *mregs, int item, int buf_item, l4_cap_idx_t *ref, int *local); long _import_dataspace(l4_msgtag_t tag, l4_buf_regs_t *bregs, l4_msg_regs_t *mregs, int item, int buf_item, l4re_ds_t *mem, l4_addr_t *addr, int *local); long _import_fpage(l4_msgtag_t tag, l4_buf_regs_t *bregs, l4_msg_regs_t *mregs, int item, l4_snd_fpage_t *fpage); diff -r a69c99595556 -r a8f1dba0cd6a libipc/lib/src/message.c --- a/libipc/lib/src/message.c Sun Feb 18 01:36:59 2024 +0100 +++ b/libipc/lib/src/message.c Fri Feb 23 01:29:50 2024 +0100 @@ -1,7 +1,7 @@ /* * Interprocess communication message abstraction. * - * Copyright (C) 2018, 2019, 2021, 2022, 2023 Paul Boddie + * Copyright (C) 2018, 2019, 2021-2024 Paul Boddie * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -63,7 +63,7 @@ void ipc_message_free(ipc_message_t *msg) { - _free_expected_capabilities(&msg->bregs, msg->expected_items); + _free_expected_capabilities(&msg->bregs, msg->import_item, msg->expected_items); } /* Clear message attributes for sending and response handling. */ diff -r a69c99595556 -r a8f1dba0cd6a libipc/lib/src/util_ipc.c --- a/libipc/lib/src/util_ipc.c Sun Feb 18 01:36:59 2024 +0100 +++ b/libipc/lib/src/util_ipc.c Fri Feb 23 01:29:50 2024 +0100 @@ -110,12 +110,12 @@ /* Free expected capabilities held by the buffer registers. */ -void _free_expected_capabilities(l4_buf_regs_t *bregs, int number) +void _free_expected_capabilities(l4_buf_regs_t *bregs, int start, int limit) { int i; l4_cap_idx_t cap; - for (i = 0; i < number; i++) + for (i = start; i < limit; i++) { cap = bregs->br[i] & L4_CAP_MASK; if (l4_is_valid_cap(cap))