summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/src/posix_devctl.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--cpukit/libcsupport/src/posix_devctl.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/cpukit/libcsupport/src/posix_devctl.c b/cpukit/libcsupport/src/posix_devctl.c
index 415b94e278..0646ee4356 100644
--- a/cpukit/libcsupport/src/posix_devctl.c
+++ b/cpukit/libcsupport/src/posix_devctl.c
@@ -1,5 +1,6 @@
/*
- * Copyright (c) 2016 Joel Sherrill <joel@rtems.org>. All rights reserved.
+ * Copyright (c) 2016, 2020 Joel Sherrill <joel@rtems.org>.
+ * All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -33,6 +34,8 @@
#include <sys/ioctl.h>
#include <rtems/seterr.h>
+#include <unistd.h>
+
int posix_devctl(
int fd,
int dcmd,
@@ -68,5 +71,16 @@ int posix_devctl(
*dev_info_ptr = 0;
}
+ /*
+ * The FACE Technical Standard Edition 3.0 and newer requires the SOCKCLOSE
+ * ioctl command. This is because the Security Profile does not include
+ * close() and applications need a way to close sockets. Closing sockets is
+ * a minimum requirement so using close() in the implementation meets that
+ * requirement but also lets the application close other file types.
+ */
+ if (dcmd == SOCKCLOSE ) {
+ return close(fd);
+ }
+
return ioctl(fd, dcmd, dev_data_ptr);
}