Hello,
There are several places here where the return values of the
ports_create_class and ports_create_bucket functions are not checked.
In the
event of an out-of-memory situation, these functions may return NULL; we
should check the return value to avoid dereferencing a null pointer.
Thanks,
--
Mikhail Karpov
From 9b7b679ab7b72016916e204c6fa1846a05b6f5ac Mon Sep 17 00:00:00 2001
From: Mikhail Karpov <[email protected]>
Date: Sun, 1 Nov 2026 13:59:53 +0700
Subject: [PATCH 4/5] Added checks for ports_create_class and
ports_create_bucket return value in several place
---
auth/auth.c | 5 +++++
devnode/devnode.c | 8 ++++++++
eth-multiplexer/multiplexer.c | 8 ++++++++
exec/main.c | 2 ++
ext2fs/pager.c | 4 ++++
fatfs/pager.c | 5 +++++
isofs/pager.c | 2 ++
libdiskfs/init-init.c | 13 ++++++++++++
libfshelp/get-identity.c | 1 +
libmachdev/ds_routines.c | 3 +++
libmachdev/trivfs_server.c | 11 ++++++++++
libnetfs/init-init.c | 9 +++++++++
libpager/pager-create.c | 1 +
libports/create-bucket.c | 1 +
lwip/main.c | 9 +++++++++
lwip/port/netif/hurdethif.c | 5 +++++
lwip/startup.c | 2 ++
pfinet/ethernet.c | 5 +++++
pfinet/main.c | 11 ++++++++++
pflocal/sock.c | 9 +++++++++
proc/main.c | 13 ++++++++++++
storeio/pager.c | 38 ++++++++++++++++++++++-------------
term/devio.c | 11 +++++++++-
term/main.c | 4 ++++
trans/crash.c | 2 ++
trans/ifsock.c | 8 ++++++++
trans/random.c | 2 ++
trans/streamio.c | 8 ++++++++
utils/fakeauth.c | 5 +++++
utils/rpctrace.c | 9 +++++++++
30 files changed, 199 insertions(+), 15 deletions(-)
diff --git a/auth/auth.c b/auth/auth.c
index 761185a..1c01913 100644
--- a/auth/auth.c
+++ b/auth/auth.c
@@ -493,7 +493,12 @@ main (int argc, char **argv)
argp_parse (&argp, argc, argv, 0, 0, 0);
auth_bucket = ports_create_bucket ();
+ if (!auth_bucket)
+ error (2, errno, "can't create auth bucket");
+
authhandle_portclass = ports_create_class (&destroy_authhandle, 0);
+ if (!authhandle_portclass)
+ error (2, errno, "can't create authhandle portclass");
/* Create the initial root auth handle. */
err = create_authhandle (&firstauth);
diff --git a/devnode/devnode.c b/devnode/devnode.c
index 3db098a..af3beff 100644
--- a/devnode/devnode.c
+++ b/devnode/devnode.c
@@ -361,8 +361,16 @@ main (int argc, char *argv[])
const struct argp argp = { options, parse_opt, args_doc, doc };
port_bucket = ports_create_bucket ();
+ if (!port_bucket)
+ error (1, errno, "can't create port bucket");
+
trivfs_cntl_class = ports_create_class (trivfs_clean_cntl, 0);
+ if (!trivfs_cntl_class)
+ error (1, errno, "can't create trivfs cntl class");
+
trivfs_protid_class = ports_create_class (trivfs_clean_protid, 0);
+ if (!trivfs_protid_class)
+ error (1, errno, "can't create trivfs protid class");
argp_parse (&argp, argc, argv, 0, 0, 0);
diff --git a/eth-multiplexer/multiplexer.c b/eth-multiplexer/multiplexer.c
index ca674b4..2282727 100644
--- a/eth-multiplexer/multiplexer.c
+++ b/eth-multiplexer/multiplexer.c
@@ -131,8 +131,16 @@ main (int argc, char *argv[])
pthread_t t;
port_bucket = ports_create_bucket ();
+ if (!port_bucket)
+ error (1, errno, "can't create port bucket");
+
other_portclass = ports_create_class (0, 0);
+ if (!other_portclass)
+ error (1, errno, "can't create other portclass");
+
vdev_portclass = ports_create_class (destroy_vdev, 0);
+ if (!vdev_portclass)
+ error (1, errno, "can't create vdev portclass");
argp_parse (&argp, argc, argv, 0, 0, 0);
diff --git a/exec/main.c b/exec/main.c
index b6d2b09..ae93c5b 100644
--- a/exec/main.c
+++ b/exec/main.c
@@ -235,6 +235,8 @@ main (int argc, char **argv)
error (1, 0, "error creating protid port class");
execboot_portclass = ports_create_class (deadboot, NULL);
+ if (!execboot_portclass)
+ error (1, errno, "can't create execboot portclass");
/* Reply to our parent. */
err = trivfs_startup (bootstrap, 0,
diff --git a/ext2fs/pager.c b/ext2fs/pager.c
index 71de4eb..3fc1f64 100644
--- a/ext2fs/pager.c
+++ b/ext2fs/pager.c
@@ -1433,6 +1433,8 @@ create_disk_pager (void)
ext2_panic ("can't create disk pager: %s", strerror (errno));
upi->type = DISK;
disk_pager_bucket = ports_create_bucket ();
+ if (!disk_pager_bucket)
+ ext2_panic ("can't create disk pager bucket: %s", strerror (errno));
get_hypermetadata ();
disk_cache_blocks = DISK_CACHE_BLOCKS;
disk_cache_size = disk_cache_blocks << log2_block_size;
@@ -1442,6 +1444,8 @@ create_disk_pager (void)
/* The file pager. */
file_pager_bucket = ports_create_bucket ();
+ if (!file_pager_bucket)
+ ext2_panic ("can't create file pager bucket: %s", strerror (errno));
/* Start libpagers worker threads. */
err = pager_start_workers (file_pager_bucket, &file_pager_requests);
diff --git a/fatfs/pager.c b/fatfs/pager.c
index 88e014d..f1169e4 100644
--- a/fatfs/pager.c
+++ b/fatfs/pager.c
@@ -781,12 +781,17 @@ create_fat_pager (void)
upi->type = FAT;
disk_pager_bucket = ports_create_bucket ();
+ if (!disk_pager_bucket)
+ error (2, errno, "can't create disk pager bucket");
+
diskfs_start_disk_pager (upi, disk_pager_bucket, MAY_CACHE, 0,
bytes_per_sector * sectors_per_fat,
&fat_image);
/* The file pager. */
file_pager_bucket = ports_create_bucket ();
+ if (!file_pager_bucket)
+ error (2, errno, "can't create file pager bucket");
/* Start libpagers worker threads. */
err = pager_start_workers (file_pager_bucket, &file_pager_requests);
diff --git a/isofs/pager.c b/isofs/pager.c
index 7b36f36..21bac67 100644
--- a/isofs/pager.c
+++ b/isofs/pager.c
@@ -151,6 +151,8 @@ create_disk_pager (void)
upi->type = DISK;
upi->np = 0;
pager_bucket = ports_create_bucket ();
+ if (!pager_bucket)
+ error(1, errno, "can't create pager bucket");
diskfs_start_disk_pager (upi, pager_bucket, 1, 0, store->size, &disk_image);
disk_image_len = store->size;
upi->p = diskfs_disk_pager;
diff --git a/libdiskfs/init-init.c b/libdiskfs/init-init.c
index f9b12f6..3054434 100644
--- a/libdiskfs/init-init.c
+++ b/libdiskfs/init-init.c
@@ -90,11 +90,24 @@ diskfs_init_diskfs (void)
diskfs_auth_server_port = getauth ();
diskfs_protid_class = ports_create_class (diskfs_protid_rele, 0);
+ if (!diskfs_protid_class)
+ return errno;
+
diskfs_control_class = ports_create_class (_diskfs_control_clean, 0);
+ if (!diskfs_control_class)
+ return errno;
+
diskfs_execboot_class = ports_create_class (0, 0);
+ if (!diskfs_execboot_class)
+ return errno;
+
diskfs_shutdown_notification_class = ports_create_class (0, 0);
+ if (!diskfs_shutdown_notification_class)
+ return errno;
diskfs_port_bucket = ports_create_bucket ();
+ if (!diskfs_port_bucket)
+ return errno;
_hurd_port_init (&_diskfs_exec_portcell, MACH_PORT_NULL);
diff --git a/libfshelp/get-identity.c b/libfshelp/get-identity.c
index d6856e4..9200925 100644
--- a/libfshelp/get-identity.c
+++ b/libfshelp/get-identity.c
@@ -86,6 +86,7 @@ id_initialize (void)
{
assert_backtrace (!idclass);
idclass = ports_create_class (NULL, id_clean);
+ assert_backtrace (idclass);
}
error_t
diff --git a/libmachdev/ds_routines.c b/libmachdev/ds_routines.c
index cdb820f..b06efc1 100644
--- a/libmachdev/ds_routines.c
+++ b/libmachdev/ds_routines.c
@@ -324,7 +324,10 @@ machdev_device_init(void)
int i;
machdev_device_bucket = ports_create_bucket ();
+ assert_backtrace (machdev_device_bucket);
+
machdev_device_class = ports_create_class (0, 0);
+ assert_backtrace (machdev_device_class);
for (i = 0; i < num_emul; i++)
{
diff --git a/libmachdev/trivfs_server.c b/libmachdev/trivfs_server.c
index fec83bc..b57f0fb 100644
--- a/libmachdev/trivfs_server.c
+++ b/libmachdev/trivfs_server.c
@@ -334,6 +334,8 @@ arrange_shutdown_notification (void)
struct port_info *pi;
machdev_shutdown_notify_class = ports_create_class (0, 0);
+ if (!machdev_shutdown_notify_class)
+ return;
/* Arrange to get notified when the system goes down */
err = ports_create_port (machdev_shutdown_notify_class, port_bucket,
@@ -420,8 +422,17 @@ machdev_trivfs_init(int argc, char **argv, mach_port_t bootstrap_resume_task,
{
mach_port_t mybootstrap = MACH_PORT_NULL;
port_bucket = ports_create_bucket ();
+ if (!port_bucket)
+ error (1, errno, "can't create port bucket");
+
trivfs_cntl_class = ports_create_class (trivfs_clean_cntl, 0);
+ if (!trivfs_cntl_class)
+ error (1, errno, "can't create trivfs cntl class");
+
trivfs_protid_class = ports_create_class (trivfs_clean_protid, 0);
+ if (!trivfs_protid_class)
+ error (1, errno, "can't create trivfs protid class");
+
trivfs_create_control (MACH_PORT_NULL, trivfs_cntl_class, port_bucket,
trivfs_protid_class, 0, &control);
diff --git a/libnetfs/init-init.c b/libnetfs/init-init.c
index 1b06260..2d7fd28 100644
--- a/libnetfs/init-init.c
+++ b/libnetfs/init-init.c
@@ -45,8 +45,17 @@ netfs_init (void)
error (2, err, "mapping time");
netfs_protid_class = ports_create_class (netfs_release_protid, 0);
+ if (!netfs_protid_class)
+ error (2, errno, "can't create netfs protid class");
+
netfs_control_class = ports_create_class (0, 0);
+ if (!netfs_control_class)
+ error (2, errno, "can't create netfs control class");
+
netfs_port_bucket = ports_create_bucket ();
+ if (!netfs_port_bucket)
+ error (2, errno, "can't create netfs port bucket");
+
netfs_auth_server_port = getauth ();
err = mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE,
&netfs_fsys_identity);
diff --git a/libpager/pager-create.c b/libpager/pager-create.c
index 78c0400..386ed9b 100644
--- a/libpager/pager-create.c
+++ b/libpager/pager-create.c
@@ -92,5 +92,6 @@ static void
create_class (void)
{
_pager_class = ports_create_class (_pager_clean, _pager_real_dropweak);
+ assert_backtrace (_pager_class);
(void) &create_class; /* Avoid warning */
}
diff --git a/libports/create-bucket.c b/libports/create-bucket.c
index 1095332..4c82786 100644
--- a/libports/create-bucket.c
+++ b/libports/create-bucket.c
@@ -31,6 +31,7 @@ static void
init_notify_port_class (void)
{
notify_port_class = ports_create_class (NULL, NULL);
+ assert_backtrace (notify_port_class);
}
struct port_bucket *
diff --git a/lwip/main.c b/lwip/main.c
index f52f80f..397e096 100644
--- a/lwip/main.c
+++ b/lwip/main.c
@@ -201,8 +201,17 @@ main (int argc, char **argv)
mach_port_t bootstrap;
lwip_bucket = ports_create_bucket ();
+ if (!lwip_bucket)
+ error (1, errno, "can't create lwip bucket");
+
addrport_class = ports_create_class (clean_addrport, 0);
+ if (!addrport_class)
+ error (1, errno, "can't create addrport class");
+
socketport_class = ports_create_class (clean_socketport, 0);
+ if (!socketport_class)
+ error (1, errno, "can't create socketport class");
+
lwip_bootstrap_portclass = PORTCLASS_INET;
err = mach_port_allocate (mach_task_self (),
diff --git a/lwip/port/netif/hurdethif.c b/lwip/port/netif/hurdethif.c
index 9ef5cf7..2127b33 100644
--- a/lwip/port/netif/hurdethif.c
+++ b/lwip/port/netif/hurdethif.c
@@ -553,7 +553,12 @@ hurdethif_module_init (void)
{
error_t err;
etherport_bucket = ports_create_bucket ();
+ if (!etherport_bucket)
+ perror ("ports_create_bucket");
+
etherread_class = ports_create_class (0, 0);
+ if (!etherread_class)
+ perror ("ports_create_class");
err = pthread_create (&input_thread, 0, hurdethif_input_thread, 0);
if (!err)
diff --git a/lwip/startup.c b/lwip/startup.c
index 262dee5..ab0c134 100644
--- a/lwip/startup.c
+++ b/lwip/startup.c
@@ -45,6 +45,8 @@ arrange_shutdown_notification (void)
struct port_info *pi;
shutdown_notify_class = ports_create_class (0, 0);
+ if (!shutdown_notify_class)
+ return;
signal (SIGTERM, sigterm_handler);
diff --git a/pfinet/ethernet.c b/pfinet/ethernet.c
index 132513d..058b1d4 100644
--- a/pfinet/ethernet.c
+++ b/pfinet/ethernet.c
@@ -182,7 +182,12 @@ ethernet_initialize (void)
pthread_t thread;
error_t err;
etherport_bucket = ports_create_bucket ();
+ if (!etherport_bucket)
+ perror ("ports_create_bucket");
+
etherreadclass = ports_create_class (0, 0);
+ if (!etherreadclass)
+ perror ("ports_create_class");
err = pthread_create (&thread, NULL, ethernet_thread, NULL);
if (!err)
diff --git a/pfinet/main.c b/pfinet/main.c
index 5d9a112..0b6735c 100644
--- a/pfinet/main.c
+++ b/pfinet/main.c
@@ -176,6 +176,8 @@ arrange_shutdown_notification (void)
struct port_info *pi;
shutdown_notify_class = ports_create_class (0, 0);
+ if (!shutdown_notify_class)
+ return;
signal (SIGTERM, sigterm_handler);
@@ -294,8 +296,17 @@ main (int argc,
pthread_t thread;
pfinet_bucket = ports_create_bucket ();
+ if (!pfinet_bucket)
+ error (1, errno, "can't create pfinet bucket");
+
addrport_class = ports_create_class (clean_addrport, 0);
+ if (!addrport_class)
+ error (1, errno, "can't create addrport class");
+
socketport_class = ports_create_class (clean_socketport, 0);
+ if (!socketport_class)
+ error (1, errno, "can't create socketport class");
+
err = mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE,
&fsys_identity);
if (err)
diff --git a/pflocal/sock.c b/pflocal/sock.c
index 20f127f..6adfbd7 100644
--- a/pflocal/sock.c
+++ b/pflocal/sock.c
@@ -502,8 +502,17 @@ error_t
sock_global_init (void)
{
sock_port_bucket = ports_create_bucket ();
+ if (!sock_port_bucket)
+ return errno;
+
sock_user_port_class = ports_create_class (sock_user_clean, NULL);
+ if (!sock_user_port_class)
+ return errno;
+
addr_port_class = ports_create_class (addr_clean, addr_unbind);
+ if (!addr_port_class)
+ return errno;
+
return 0;
}
diff --git a/proc/main.c b/proc/main.c
index e2c5f1a..a6f12ad 100644
--- a/proc/main.c
+++ b/proc/main.c
@@ -185,9 +185,21 @@ main (int argc, char **argv, char **envp)
error (2, 0, "proc server can only be run by startup during boot");
proc_bucket = ports_create_bucket ();
+ if (!proc_bucket)
+ error (2, errno, "can't create proc bucket");
+
proc_class = ports_create_class (0, 0);
+ if (!proc_class)
+ error (2, errno, "can't create proc class");
+
generic_port_class = ports_create_class (0, 0);
+ if (!generic_port_class)
+ error (2, errno, "can't create generic port class");
+
exc_class = ports_create_class (exc_clean, 0);
+ if (!exc_class)
+ error (2, errno, "can't create exc class");
+
ports_create_port (generic_port_class, proc_bucket,
sizeof (struct port_info), &genport);
generic_port = ports_get_right (genport);
@@ -197,6 +209,7 @@ main (int argc, char **argv, char **envp)
/* Create the startup proc object for /hurd/startup (PID 2). */
startup_proc = allocate_proc (MACH_PORT_NULL);
+ assert_backtrace (startup_proc);
startup_proc->p_deadmsg = 1;
complete_proc (startup_proc, HURD_PID_STARTUP);
diff --git a/storeio/pager.c b/storeio/pager.c
index 7a26efa..61f3512 100644
--- a/storeio/pager.c
+++ b/storeio/pager.c
@@ -143,32 +143,40 @@ pager_clear_user_data (struct user_pager_info *upi)
static struct port_bucket *pager_port_bucket = 0;
static struct pager_requests *pager_requests;
+static int dev_pading_success = 0;
/* Initialize paging for this device. */
-static void
+static error_t
init_dev_paging (void)
{
- if (! pager_port_bucket)
+ error_t err = 0;
+ if (!dev_pading_success)
{
static pthread_mutex_t pager_global_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock (&pager_global_lock);
- if (pager_port_bucket == NULL)
+ if (!pager_port_bucket)
+ pager_port_bucket = ports_create_bucket ();
+
+ if (!pager_port_bucket)
{
- error_t err;
+ err = errno;
+ error (0, err, "ports_create_bucket");
+ goto out;
+ }
- pager_port_bucket = ports_create_bucket ();
+ /* Start libpagers worker threads. */
+ err = pager_start_workers (pager_port_bucket, &pager_requests);
+ if (err)
+ error (0, err, "pager_start_workers");
+ else
+ dev_pading_success = 1;
- /* Start libpagers worker threads. */
- err = pager_start_workers (pager_port_bucket, &pager_requests);
- if (err)
- {
- errno = err;
- error (0, err, "pager_start_workers");
- }
- }
+ out:
pthread_mutex_unlock (&pager_global_lock);
}
+
+ return err;
}
void
@@ -229,7 +237,9 @@ dev_get_memory_object (struct dev *dev, vm_prot_t prot, memory_object_t *memobj)
{
int created = 0;
- init_dev_paging ();
+ err = init_dev_paging ();
+ if (err)
+ return err;
pthread_mutex_lock (&dev->pager_lock);
diff --git a/term/devio.c b/term/devio.c
index 372d076..f71a811 100644
--- a/term/devio.c
+++ b/term/devio.c
@@ -111,7 +111,16 @@ devio_init (void)
return err;
mach_port_deallocate (mach_task_self (), host_priv);
if (!phys_reply_class)
- phys_reply_class = ports_create_class (0, 0);
+ {
+ phys_reply_class = ports_create_class (0, 0);
+ if (!phys_reply_class)
+ {
+ err = errno;
+ mach_port_deallocate (mach_task_self (), device_master);
+ return err;
+ }
+ }
+
return 0;
}
diff --git a/term/main.c b/term/main.c
index 1e661da..8f815c4 100644
--- a/term/main.c
+++ b/term/main.c
@@ -346,6 +346,8 @@ main (int argc, char **argv)
int openmode;
term_bucket = ports_create_bucket ();
+ if (!term_bucket)
+ error (1, errno, "can't create term bucket");
trivfs_add_control_port_class (&tty_cntl_class);
trivfs_add_control_port_class (&pty_cntl_class);
@@ -353,6 +355,8 @@ main (int argc, char **argv)
trivfs_add_protid_port_class (&pty_class);
cttyid_class = ports_create_class (0, 0);
+ if (!cttyid_class)
+ error (1, errno, "can't create cttyid class");
init_users ();
diff --git a/trans/crash.c b/trans/crash.c
index 2e0ded2..0d3d8b8 100644
--- a/trans/crash.c
+++ b/trans/crash.c
@@ -761,6 +761,8 @@ main (int argc, char **argv)
procserver = getproc ();
crasher_portclass = ports_create_class (dead_crasher, 0);
+ if (!crasher_portclass)
+ error (1, errno, "can't create crasher portclass");
err = trivfs_add_control_port_class (&trivfs_control_class);
if (err)
diff --git a/trans/ifsock.c b/trans/ifsock.c
index f14b5e7..9b0e7e4 100644
--- a/trans/ifsock.c
+++ b/trans/ifsock.c
@@ -78,8 +78,16 @@ main (int argc, char **argv)
argp_parse (&argp, argc, argv, 0, 0, 0);
control_class = ports_create_class (trivfs_clean_cntl, 0);
+ if (!control_class)
+ error (1, errno, "can't create control class");
+
node_class = ports_create_class (trivfs_clean_protid, 0);
+ if (!node_class)
+ error (1, errno, "can't create node class");
+
port_bucket = ports_create_bucket ();
+ if (!port_bucket)
+ error (1, errno, "can't create port bucket");
task_get_bootstrap_port (mach_task_self (), &bootstrap);
if (bootstrap == MACH_PORT_NULL)
diff --git a/trans/random.c b/trans/random.c
index b358821..39f74d2 100644
--- a/trans/random.c
+++ b/trans/random.c
@@ -658,6 +658,8 @@ arrange_shutdown_notification (void)
struct port_info *pi;
shutdown_notify_class = ports_create_class (0, 0);
+ if (!shutdown_notify_class)
+ return errno;
if (signal (SIGTERM, sigterm_handler) == SIG_ERR)
return errno;
diff --git a/trans/streamio.c b/trans/streamio.c
index 57bbf04..c35fef7 100644
--- a/trans/streamio.c
+++ b/trans/streamio.c
@@ -304,6 +304,8 @@ main (int argc, char *argv[])
error (2, 0, "Must be started as a translator");
streamdev_bucket = ports_create_bucket ();
+ if (!streamdev_bucket)
+ error (2, errno, "can't create streamdev bucket");
err = trivfs_startup (bootstrap, 0,
0, streamdev_bucket, 0, streamdev_bucket,
@@ -831,6 +833,12 @@ dev_open (const char *name, dev_mode_t mode)
return err;
phys_reply_class = ports_create_class (0, 0);
+ if (!phys_reply_class)
+ {
+ err = errno;
+ goto device_master_deallocate;
+ }
+
err = ports_create_port (phys_reply_class, streamdev_bucket,
sizeof (struct port_info), &phys_reply_pi);
if (err)
diff --git a/utils/fakeauth.c b/utils/fakeauth.c
index 7180bb3..0d64f2b 100644
--- a/utils/fakeauth.c
+++ b/utils/fakeauth.c
@@ -364,7 +364,12 @@ believe it has restricted them to different identities or no identity at all.\
argp_parse (&argp, argc, argv, ARGP_IN_ORDER, &argi, 0);
auth_bucket = ports_create_bucket ();
+ if (!auth_bucket)
+ error (2, errno, "can't create auth bucket");
+
authhandle_portclass = ports_create_class (&destroy_authhandle, 0);
+ if (!authhandle_portclass)
+ error (2, errno, "can't create authhandle portclass");
/* Create the initial root auth handle. */
err = create_authhandle (&firstauth);
diff --git a/utils/rpctrace.c b/utils/rpctrace.c
index d8dc0ca..3601206 100644
--- a/utils/rpctrace.c
+++ b/utils/rpctrace.c
@@ -1852,8 +1852,17 @@ main (int argc, char **argv, char **envp)
setlinebuf (ostream);
traced_bucket = ports_create_bucket ();
+ if (!traced_bucket)
+ error (1, errno, "can't create traced bucket");
+
traced_class = ports_create_class (&traced_clean, NULL);
+ if (!traced_class)
+ error (1, errno, "can't create traced class");
+
other_class = ports_create_class (0, 0);
+ if (!other_class)
+ error (1, errno, "can't create other class");
+
err = ports_create_port (other_class, traced_bucket,
sizeof (*notify_pi), ¬ify_pi);
assert_perror_backtrace (err);
--
2.43.0