forked from OP-TEE/optee_client
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tee-supplicant: send READY=1 notification to systemd
This option is very useful when tee-supplicant is started from systemd and can used with Type=notify to signal readiness Signed-off-by: Ayoub Zaki <[email protected]> Acked-by: Jerome Forissier <[email protected]> Tested-by: Mikko Rapeli <[email protected]>
- Loading branch information
1 parent
f1f000b
commit a5b1ffc
Showing
5 changed files
with
113 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
// SPDX-License-Identifier: MIT-0 | ||
/* | ||
* The code below is imported from: | ||
* https://www.freedesktop.org/software/systemd/man/devel/sd_notify.html#Standalone%20Implementations | ||
*/ | ||
|
||
#define _GNU_SOURCE 1 | ||
#include <string.h> | ||
#include <errno.h> | ||
#include <inttypes.h> | ||
#include <signal.h> | ||
#include <stdbool.h> | ||
#include <stddef.h> | ||
#include <stdlib.h> | ||
#include <stdio.h> | ||
#include <sys/socket.h> | ||
#include <sys/un.h> | ||
#include <time.h> | ||
#include <unistd.h> | ||
|
||
#include "sd_notify.h" | ||
|
||
#define _cleanup_(f) __attribute__((cleanup(f))) | ||
|
||
static void closep(int *fd) | ||
{ | ||
if (!fd || *fd < 0) | ||
return; | ||
|
||
close(*fd); | ||
*fd = -1; | ||
} | ||
|
||
static int notify(const char *message) | ||
{ | ||
union sockaddr_union { | ||
struct sockaddr sa; | ||
struct sockaddr_un sun; | ||
} socket_addr = { | ||
.sun.sun_family = AF_UNIX, | ||
}; | ||
|
||
ssize_t written = 0; | ||
size_t path_length, message_length = 0; | ||
_cleanup_(closep) int fd = -1; | ||
const char *socket_path = NULL; | ||
|
||
/* Verify the argument first */ | ||
if (!message) | ||
return -EINVAL; | ||
|
||
message_length = strlen(message); | ||
if (message_length == 0) | ||
return -EINVAL; | ||
|
||
/* If the variable is not set, the protocol is a noop */ | ||
socket_path = getenv("NOTIFY_SOCKET"); | ||
if (!socket_path) | ||
return 0; /* Not set? Nothing to do */ | ||
|
||
/* Only AF_UNIX is supported, with path or abstract sockets */ | ||
if (socket_path[0] != '/' && socket_path[0] != '@') | ||
return -EAFNOSUPPORT; | ||
|
||
path_length = strlen(socket_path); | ||
/* Ensure there is room for NULL byte */ | ||
if (path_length >= sizeof(socket_addr.sun.sun_path)) | ||
return -E2BIG; | ||
|
||
memcpy(socket_addr.sun.sun_path, socket_path, path_length); | ||
|
||
/* Support for abstract socket */ | ||
if (socket_addr.sun.sun_path[0] == '@') | ||
socket_addr.sun.sun_path[0] = 0; | ||
|
||
fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0); | ||
if (fd < 0) | ||
return -errno; | ||
|
||
if (connect(fd, &socket_addr.sa, offsetof(struct sockaddr_un, sun_path) + path_length) != 0) | ||
return -errno; | ||
|
||
written = write(fd, message, message_length); | ||
if (written != (ssize_t) message_length) | ||
return written < 0 ? -errno : -EPROTO; | ||
|
||
return 1; /* Notified! */ | ||
} | ||
|
||
int sd_notify_ready(void) | ||
{ | ||
return notify("READY=1"); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
// SPDX-License-Identifier: MIT-0 | ||
/* | ||
* The code below is imported from: | ||
* https://www.freedesktop.org/software/systemd/man/devel/sd_notify.html#Standalone%20Implementations | ||
*/ | ||
#ifndef SD_NOTIFY_H | ||
#define SD_NOTIFY_H | ||
|
||
int sd_notify_ready(void); | ||
|
||
#endif /* SD_NOTIFY_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters