Tomasz Swierczek [Wed, 17 Apr 2024 12:46:48 +0000 (14:46 +0200)]
Release 1.9.1
* Add mitigation for DDOS attack
* Adjust coverage script after lcov upgrade
Change-Id: Ib852206bcbeb276db97152c7b463916f62eff483
Tomasz Swierczek [Wed, 17 Apr 2024 11:48:46 +0000 (13:48 +0200)]
Add mitigation for DDOS attack
Adversary can send too big message to the daemon,
making it fail on allocation. Few places were required
to be enhanced with catch for std::bad_alloc & proper
graceful closing of connection instead of terminating
the process.
Change-Id: Id05dd3ee3d323a8d47ba93e33fae9d9bc6bb255d
Dariusz Michaluk [Fri, 5 Apr 2024 10:07:43 +0000 (12:07 +0200)]
Adjust coverage script after lcov upgrade
Change-Id: I5e02bfd884ea1fa8b6f96796bcaea143ac6eb10c
Tomasz Swierczek [Thu, 22 Feb 2024 16:47:27 +0000 (17:47 +0100)]
Release 1.9.0
* Add core privilege: wifi.secureinfo
Change-Id: I33704a6c60d798d788fd89dcfef7fe9c33a94871
Krzysztof Malysa [Tue, 20 Feb 2024 10:35:14 +0000 (11:35 +0100)]
Add core privilege: wifi.secureinfo
- wifi.secureinfo (platform level): app can read Wi-Fi security information
Change-Id: Iad23ef25c8c2aa65ecf27e47cc1ebbf59c645292
Tomasz Swierczek [Wed, 17 Jan 2024 08:53:05 +0000 (09:53 +0100)]
Release 1.8.14
* Removed unnecessary bloat & fix readme
* Modified error log in case of failed relabel_self setup
* Add unit tests for permissible file update, initialization and removal
* Implement a mechanism for permissible file repair
* Implement permissible file integrity verification
Change-Id: I1155d61b5343f8981facd2a3fb5b5a9d7f71a144
Tomasz Swierczek [Mon, 15 Jan 2024 14:39:30 +0000 (15:39 +0100)]
Removed unnecessary bloat & fix readme
Change-Id: Iafa766759f035a2b9f5d4232d0b16eac46781f4e
Tomasz Swierczek [Fri, 27 Oct 2023 14:05:59 +0000 (16:05 +0200)]
Modified error log in case of failed relabel_self setup
Error in this place sometimes happens on VD images, but without
harsh consequences, as if it happened in places where the label
list is still empty. Added number of labels to be printed.
Change-Id: I564b819dd53ae359b908ee111573cdde950343ce
Filip Skrzeczkowski [Wed, 4 Oct 2023 09:12:23 +0000 (11:12 +0200)]
Add unit tests for permissible file update, initialization and removal
Change-Id: Id05b5deaa8d4fd39c53478c555524f4be4ddac2b
Filip Skrzeczkowski [Thu, 28 Sep 2023 11:19:50 +0000 (13:19 +0200)]
Implement a mechanism for permissible file repair
Permissible files that have been marked as invalid due to their hash
not matching can now be repaired by fetching the relevant data directly
form PrivilegeDb. This works for both the service and the client library.
As the client lacks the privileges to do it on their own, in that case
a request is sent to the Security Manager daemon.
Change-Id: I43fee3d39c015a7fbba0e674c29c904ac26e91bf
Filip Skrzeczkowski [Wed, 23 Aug 2023 13:01:00 +0000 (15:01 +0200)]
Implement permissible file integrity verification
Permissible files have a SHA-1 hash attached at the beginning.
Upon opening it is compared with a new hash calculated from the
file content in order to verify if the file's integrity is intact.
An error is thrown should the hashes differ. Files with no hash are
still supported but reading/updating the rules stored in them
will cause them to automatically switch to the new system.
Change-Id: I5ec379b58cc78e63bcde084ada43273237d61beb
Tomasz Swierczek [Wed, 29 Nov 2023 10:06:34 +0000 (11:06 +0100)]
Release 1.8.13
* Rework security_manager_sync_threads_internal()
Change-Id: I03550d31dd5d8b1230dddc0f8c0b04e022beafce
Tomasz Swierczek [Fri, 24 Nov 2023 12:47:07 +0000 (13:47 +0100)]
Rework security_manager_sync_threads_internal()
Add "stop-the-world" implemenation in signal handler.
Why this change may be needed?
------------------------------
On slower platforms, some dotnet-based app candidate processes
tend to have 10-15-... threads. Sending signals that change
Smack labels & drop caps to each of them can be delayed - for apps
that don't have a priority to get launched, this can take up
to 10-15 seconds, in pathological cases (observed in real life,
on low-end boards). In such situation, there's non-zero time window
when some threads have changed security attributes and some
haven't - access control issues occur in app candidate's logic,
leading to serious errors & abort()s in the launched app.
With this modification, threads change the Smack labels & capabilities
when none of them are performing any of their original app candidate
logic and the only thread NOT in signal handler is the one
with security-manager client library.
This is expected to limit Smack/permission issues mentioned earlier.
Details, disclaimers:
---------------------
This implementation CANNOT fix an issue where app candidate process
created a resource (ie. a file) BEFORE call to security_manager_prepare_app()
and then, wants to access it (for read) AFTER call to the function.
This is because, before the transition, the process has either User
or System::Privileged Smack label, to which apps do not have R Smack rule
(such issues can still occur and can't be dealt with at security-manger level).
This implementation can be up to 3x slower on low-end boards,
as we have 3 waiting points here, instead of one:
1) waiting for signals to arrive in all threads (place from old implementation)
2) waiting for signals to be able to start changing caps/Smack labels
3) waiting for signals to sync after attributes are changed to start work
Tests performed on Tizen emulator show about 30-40% slowdown
of prepare app vs. previous implementation.
This implementation assumes that the size of set of all TIDs
that can appear in a process (already dead + currently alive) will not exceed 1000.
A global array of std::atomic's is used to keep track of each thread's
state in the execution of signal handler.
This implementation uses sleep() and std::atomic to implement
waiting for the barrier inside a signal handler (home-made spinlock,
basically). While this can be done more elegantly, ie. with std::atomic's wait()
functionality, this C++ feature doesn't seem to be supported in current Tizen
toolchain (c++2a supported, not full c++20).
An alternative way for synchronization would be to use high-profile system
resources like fd's or semaphores, however, because the VD H/W platform
where the issue of thread dis-synchronization happens is very slow, interfacing
with kernel was limited to minimum, as adding any context switch to kernel
may slow down even more.
Change-Id: Ic7037acaeb4e3eaab03284ae63216e7ab4d6d862
Tomasz Swierczek [Fri, 24 Nov 2023 10:20:27 +0000 (11:20 +0100)]
Release 1.8.12
* Add even more logs around IPC
Change-Id: I15012a4e14844397b3115ff8f21a6fb57256d524
Tomasz Swierczek [Fri, 24 Nov 2023 10:19:43 +0000 (11:19 +0100)]
Add even more logs around IPC
Needed by VD division for diagnostic purposes on release images.
Change-Id: Id45f577c50234a80152d646b6dc11f12b6633690
Tomasz Swierczek [Thu, 16 Nov 2023 10:49:00 +0000 (11:49 +0100)]
Release 1.8.11
* Add better logs around IPC
Change-Id: Ib5aa13e91250469b64c301ebfc17e7f5e7f2b2d1
Tomasz Swierczek [Thu, 16 Nov 2023 10:30:00 +0000 (11:30 +0100)]
Add better logs around IPC
Needed by VD division to debug socket clogging problem in the kernel.
Change-Id: Ic1764b8e9342f93911dcf26f6c03fca028a7f72f
Tomasz Swierczek [Tue, 17 Oct 2023 10:33:22 +0000 (12:33 +0200)]
Release 1.8.10
* Add mitigation for long processing of signals in VD's environments
Change-Id: I499a9b16bd2ba9552ac8972c7efba8e26b1906b2
Tomasz Swierczek [Tue, 17 Oct 2023 09:46:40 +0000 (11:46 +0200)]
Add mitigation for long processing of signals in VD's environments
* waiting for signals - timeout increased to 20s from 10s
* added 2 ms timeout if tgkill() will return EAGAIN (happend in actual product image in testing once)
Change-Id: I26ce63e66fc36536136a3eab7903efb07fb35437
Tomasz Swierczek [Thu, 31 Aug 2023 06:25:16 +0000 (08:25 +0200)]
Release 1.8.9
* Create DB file backup in case it was discovered to be corrupted
* Fix app-defined privileges certificate verification
* Migrate to openssl3
Change-Id: I5ebe3bbf8e081d0fbb2efe9f3ae2813db2cb158f
Tomasz Swierczek [Tue, 22 Aug 2023 07:54:48 +0000 (09:54 +0200)]
Create DB file backup in case it was discovered to be corrupted
This way, the DB can be later analyzed in detail.
Unit tests were modified to check if the backup
is properly created.
This change was requested by VD division.
Change-Id: I151113f793a2d87ea5060931ffeef72f511558cf
Dariusz Michaluk [Tue, 29 Aug 2023 09:30:50 +0000 (11:30 +0200)]
Fix app-defined privileges certificate verification
Since OpenSSL 3.0 a number of additional checks introduced to X509_verify_cert()
according to requirements in RFC 5280 in case X509_V_FLAG_X509_STRICT is set.
For example, the basicConstraints of CA certificates must be marked critical.
This checks cause verification failure for not well-formed certificates.
Having backward compatibility in mind, it's better to disable strict checking
than replacing all broken certificates in applications.
Change-Id: I8c6cb50be7c36ff7ef3d5c221dd4f066c2626be6
Dariusz Michaluk [Wed, 12 Jul 2023 10:13:04 +0000 (12:13 +0200)]
Migrate to openssl3
Change-Id: Ibab2eed97c6011e303433e48322b3f00fbb48a62
Tomasz Swierczek [Fri, 4 Aug 2023 06:26:37 +0000 (08:26 +0200)]
Release 1.8.8
* Fix error checking for open
Change-Id: I8780a3601482f84681f37009aa7dd0fd6ad7f4c8
Tomasz Swierczek [Fri, 4 Aug 2023 04:39:49 +0000 (06:39 +0200)]
Fix error checking for open
stdin should not get closed, but anyway, this should get fixed.
Change-Id: Icfeb0e8be0893ec14640f579d7818670d84ef918
Krzysztof Jackiewicz [Fri, 21 Jul 2023 08:56:28 +0000 (10:56 +0200)]
Release 1.8.7
* Improve threads' privilege synchronisation
Change-Id: I178bee9a70016bf29ac62de67576b3580ecbdf9b
Tomasz Swierczek [Thu, 13 Jul 2023 14:55:50 +0000 (16:55 +0200)]
Improve threads' privilege synchronisation
* Drop the caps after the threads have been listed for a second time
(after the sync). This is to avoid errors during accessing /proc for
newly spawned threads as a unprivileged process.
* Check if newly spawned threads have correct labels.
* Retry the privileges sync twice for all remaining privileged threads.
* Retry listing of /proc/self/task/ in case of failure.
* Use set instead of vector for easier tid checks.
* Omit main thread from the list.
Change-Id: I21e7e5dd3d5efb70fe51a1597bd7bc4ccf1099e8
Tomasz Swierczek [Tue, 11 Jul 2023 17:14:43 +0000 (19:14 +0200)]
Release 1.8.6
* Revert "Change the signal used by security-manager prepare_app implementation"
Change-Id: I26f7f7e384a4b0ca127acad3399d94e2c3a3fce1
Tomasz Swierczek [Tue, 11 Jul 2023 17:14:07 +0000 (19:14 +0200)]
Revert "Change the signal used by security-manager prepare_app implementation"
This reverts commit
4e26238c9e62a442042145a42207c8b669bf939d.
TCT tests seem to fail when signal is changed to SIGRTMIN+2
from SIGSETXID used previously.
Change-Id: Ib7df235addc30d6fb4b5d503a6f43d012218b55d
Tomasz Swierczek [Mon, 10 Jul 2023 05:49:31 +0000 (07:49 +0200)]
Release 1.8.5
* Increase waiting time for threads to receive signal
* Change the signal used by security-manager prepare_app implementation
* Fix an ugly bug in printing debug information about threads
Change-Id: I29507a05612dab8fcff9629bd743885b02c19ad5
Tomasz Swierczek [Mon, 10 Jul 2023 05:47:24 +0000 (07:47 +0200)]
Increase waiting time for threads to receive signal
As discussed with VD engineers, thats now increased to 10 seconds.
Also, additional log with information about waiting (warning log)
was added.
Change-Id: Iaf76777af2adb2ce65f98a71349a99e1a0704cd5
Tomasz Swierczek [Fri, 7 Jul 2023 08:10:20 +0000 (10:10 +0200)]
Change the signal used by security-manager prepare_app implementation
SIGSETXID was used previously to mimic the exact behaviour of glibc.
However, in testing on VD side using SIGSETXID can cause interference
with regular glibc usage, which also leads to abort().
To give more details: if threads are so delayed that their signal handling
is done ie. > 2 seconds after the sending was done, the signal arrives
in the thread when security-manager already did change the signal handler
back to original glibc. Then, glibc, checks whether it sent the signal,
it recognizes it didn't, and aborts/quits.
Changing signal number will not cause glibc to abort/fail, and if execution
gets back to security-manager main thread, IT will fail, printing
all necessary information about threads for debugging, before calling abort().
Changed signal number to SIGRTMIN+2, as advised.
Change-Id: I9b755504898daee71997ee35023c3d647e332b84
Tomasz Swierczek [Fri, 7 Jul 2023 07:28:06 +0000 (09:28 +0200)]
Fix an ugly bug in printing debug information about threads
The for range was calcualted based on wrong variable,
resulting in not all threads information being printed.
Also, changed error handling a bit.
Change-Id: I45fb88c889fb158ba63e0eb55f8d9c813fb40f9c
Tomasz Swierczek [Thu, 6 Jul 2023 07:29:14 +0000 (09:29 +0200)]
Release 1.8.4
* Fix static analysis issues
* Fix build for new toolchain
* Add additional debug information in prepare_app
Change-Id: I5ff8f36c31f7e5527a816842433a56c1ec2d1a00
Tomasz Swierczek [Thu, 6 Jul 2023 07:26:13 +0000 (09:26 +0200)]
Fix static analysis issues
Change-Id: I90839d874efd4e8b53a7c30870182fbf83c8c248
Tomasz Swierczek [Thu, 6 Jul 2023 07:05:04 +0000 (09:05 +0200)]
Fix build for new toolchain
Change-Id: I156cf22c4a752057490a6d6d7fbe040358fc933d
Tomasz Swierczek [Wed, 5 Jul 2023 08:28:57 +0000 (10:28 +0200)]
Add additional debug information in prepare_app
In case a thread is not receiving signal to change its Smack label
& capabilities, additional debugging information is required to
check what has happened.
Printing the debugging information is followed by an explicit
abort() so that the app candidate process can be debugged
to know what was happening inside each of the threads.
Statuses available to inspect each thread:
* thread dead during attempt to send signal
-> NOT an issue, but info is printed with TID as it can be useful
* thread not synced
-> thread was on the list when signal sending attempt was made,
but didn't seem to have received signal
* thread received signal
-> thread did receive signal, but failed at setting Smack label
* thread changed Smack label
-> it did receive signal, did change Smack label but cannot change caps
* thread fully synced
-> all went well - information is printed just to help debugging
Dump of status of each thread like above is printed ONLY if offending
thread is found that didn't seem to process signal handler correctly.
Change-Id: Ia1a560fb4baffadc354a403e60d1ab81d8828c42
Tomasz Swierczek [Fri, 16 Jun 2023 08:08:38 +0000 (10:08 +0200)]
Release 1.8.3
* Change the way threads are checked at the end of prepare_app call
Change-Id: I16c3b498726fede923dfce9cc1a603ad67e8dbb7
Tomasz Swierczek [Wed, 14 Jun 2023 07:45:05 +0000 (09:45 +0200)]
Change the way threads are checked at the end of prepare_app call
It was verified experimentally(*), that even if functions:
(1) smack_set_label_for_self()
(2) cap_set_proc()
have successfully changed process (main thread) security attributes,
even then /proc can contain stale/older data when implementation
in file:
check-proper-drop.cpp (the client side)
is checking whether all threads are properly synchronized.
Assuming mentioned functions operate properly and we trust their
return values, we can assume that checking in check-proper-drop.cpp
can be limited to checking if any new thread was spawned that was not
on the list of threads during call to function:
security_manager_sync_threads_internal()
This way, we're not relying on contents of /proc in terms of actual
security attributes, just the list of thread-IDs.
(*)
Following error (abort in client library) has been detected during
automated testing of VD image:
19548.940 E/SECURITY_MANAGER_CLIENT(P11930, T11930): check-proper-drop.cpp: checkThreads(175) > Offending taskId is: 11930
which means, that even though (1) and (2) succeeded for current taskId
(these had to, analysing the logic of our client library), there was an issue
in checking the contents of /proc for current taskId.
Change-Id: Ida49acd8981eea8c3df30ef32f23a1f4b0ef1ae3
Tomasz Swierczek [Tue, 30 May 2023 12:24:33 +0000 (14:24 +0200)]
Release 1.8.2
* Abort app candidate process in case of wrong setup
Change-Id: I13c0e803d1a39b50f4956b5fbb8facd7d8eea3cd
Tomasz Swierczek [Tue, 30 May 2023 11:46:12 +0000 (13:46 +0200)]
Abort app candidate process in case of wrong setup
When offending thread with higher privileges is detected,
new error log is added and security-manager-client library
forces entire app candidate process to abort.
This will effectively block possibility of privilege escalation
if a new thread was spawned ie. by Chromium during prepare_app call.
Abort will also generate coredump, making it easier to debug
the source of offending thread.
Change-Id: I16772d0e51aa112548acb64f7b82ccf87948ded9
Tomasz Swierczek [Wed, 24 May 2023 12:54:55 +0000 (14:54 +0200)]
Release 1.8.1
* Optimize operations on file with list of Smack labels
* Change order of items checking during getDirectoryContents() loop
* Small fixes in unit tests
Change-Id: I2acc5605bb54366700f1c05f4b856b96b1f82d70
Tomasz Swierczek [Mon, 8 May 2023 09:20:18 +0000 (11:20 +0200)]
Optimize operations on file with list of Smack labels
There's no need to call DB and tz-platform-config for each
label of given user; it makes sense to re-use the fact
that update is called always on update/install/uninstall of precisely
specified package, so changes only affect labels of that package,
be it removal or addition to the set.
Change-Id: I88686341fc49186afe60ed9f86dbdb98c1258064
Tomasz Swierczek [Tue, 2 May 2023 06:44:53 +0000 (08:44 +0200)]
Change order of items checking during getDirectoryContents() loop
Previously, the function called fstatat() even on . and .. which
could have been not wanted by the caller to get listed/analyzed.
This change was inspired by an issue where an error happened during
call to prepare_app() - error happened on calling fstatat(), during
checking if threads properly dropped capabilities/changed labels;
error was in accessing ".." element inside /proc/self/task,
while the audit logged, at the same time, a Smack error of access
attempt from label User::Pkg::<ID> to System::Privileged on
proc filesystem.
While this change doesn't fix that issue on its own, it optimizes
the code.
Change-Id: I83fda49530fb32776cf6edcc364dc574a7ee08f9
Tomasz Swierczek [Wed, 22 Feb 2023 14:22:05 +0000 (15:22 +0100)]
Small fixes in unit tests
Spellcheck & another few negative tests for filesystem.
Change-Id: If905479a78f29f341487168483e2b68c13da0ee4
Tomasz Swierczek [Tue, 21 Feb 2023 09:11:54 +0000 (10:11 +0100)]
Release 1.8.0
Package versioning bump to 1.8.X as Tizen 6.5 got update
(non-fast-forward) to 1.7.14.
This release is intended for tizen and tizen_7.0 branches.
Change-Id: I0c7fe641bb210c7ccfe5bf2e5db59f943083c9f4
Tomasz Swierczek [Thu, 2 Feb 2023 06:28:39 +0000 (07:28 +0100)]
Release 1.7.13
* Fix static analysis
Change-Id: I04137e1db4e557a6b4cdc828541773a2fad9b955
Tomasz Swierczek [Thu, 26 Jan 2023 10:19:22 +0000 (11:19 +0100)]
Fix static analysis
Printing moved object is useless, even in debug logs.
The order of operation (logging vs moving) was changed.
Change-Id: I49ad49991e773ecf5ac65aa331b1cfb2bf1ad7cc
Tomasz Swierczek [Thu, 22 Dec 2022 10:30:01 +0000 (11:30 +0100)]
Release 1.7.12
* Change some logs into warnings
Change-Id: Ic77c3be5eb1b28648fecdce67ae14ebae9bac0d5
Tomasz Swierczek [Thu, 15 Dec 2022 11:54:50 +0000 (12:54 +0100)]
Change some logs into warnings
Per specific request of Visual Display Division.
Change-Id: I4e5f579dafa16aab7f7f443a9f57e15c443862b4
Tomasz Swierczek [Mon, 28 Nov 2022 11:13:28 +0000 (12:13 +0100)]
Release 1.7.11
* Add additional logs to security-manager
Change-Id: I430b7392a2176330b1fce3054a1ba1ca5ec49af6
Tomasz Swierczek [Mon, 28 Nov 2022 11:11:50 +0000 (12:11 +0100)]
Add additional logs to security-manager
Per explicit request of Visual Display division.
One log changed to warning, also for specific request.
Change-Id: I6fbfc528002a78afd78e60699e342795248f4a1b
Tomasz Swierczek [Tue, 22 Nov 2022 09:53:19 +0000 (10:53 +0100)]
Release 1.7.10
* Disable LTO
Change-Id: If7bb805b212c5574a6cb501cb3893c2f037c9235
Tomasz Swierczek [Tue, 22 Nov 2022 09:44:42 +0000 (10:44 +0100)]
Disable LTO
In case LTO is enabled, function defined in asm (and declared as such)
generates error at linking stage (client-security-manager.cpp, function
__restore_rt).
Change-Id: I31ff9de14755b9b531f25e777c439f7153c6548c
Tomasz Swierczek [Thu, 10 Nov 2022 14:31:26 +0000 (15:31 +0100)]
Release 1.7.9
* Change delay for setting cpu_inheritance
Change-Id: I5e362885ee4029b67062247011fd9d55a2942739
Tomasz Swierczek [Thu, 10 Nov 2022 14:31:08 +0000 (15:31 +0100)]
Change delay for setting cpu_inheritance
Change-Id: If46ba6429226c4fcd7a64179fb93d715c84f1635
Tomasz Swierczek [Mon, 17 Oct 2022 11:38:07 +0000 (13:38 +0200)]
Release 1.7.8
* Change logic of security_manager_app_update()
Change-Id: If230c9a5aa87b294066c830b9582b678c6e6ad1c
Tomasz Swierczek [Mon, 17 Oct 2022 08:31:09 +0000 (10:31 +0200)]
Change logic of security_manager_app_update()
Now the function allows to update package & remove not-requested
appIds present before even if no hybrid status change has been done.
Change-Id: I3f13dddd726c57e6a1572ce3a608eaf16768ad55
Tomasz Swierczek [Wed, 7 Sep 2022 06:33:51 +0000 (08:33 +0200)]
Release 1.7.7
* Appease SVACE
Change-Id: If5cdbb74949e2728859bbdb73be17a6626f05b4d
Konrad Lipinski [Wed, 24 Aug 2022 12:07:36 +0000 (14:07 +0200)]
Appease SVACE
Change-Id: I9da1046731377e5c47096f34769f38aa67a23ae2
Konrad Lipinski [Thu, 11 Aug 2022 10:49:58 +0000 (12:49 +0200)]
Release 1.7.6
* Fix out of bounds socket description vector access
* Delay service thread construction until dependencies are initialized
* Decrease message buffer test payload size to avoid bad_alloc
* Refactor errno logging
Change-Id: I8287171336f96d277ea7608213cb5b26c5901dbb
Konrad Lipinski [Thu, 11 Aug 2022 08:50:44 +0000 (10:50 +0200)]
Fix out of bounds socket description vector access
Change-Id: Iacfa7ad31ad1aa5e7f4743fc114e283acc58af8e
Konrad Lipinski [Thu, 11 Aug 2022 08:30:16 +0000 (10:30 +0200)]
Delay service thread construction until dependencies are initialized
Change-Id: I386c56804eae770e0bb90acbecc705d14010d804
Konrad Lipinski [Wed, 10 Aug 2022 15:23:54 +0000 (17:23 +0200)]
Decrease message buffer test payload size to avoid bad_alloc
Change-Id: I24c1b17e5b8e8d224b7c8d47dbe0942467e528bf
Konrad Lipinski [Tue, 2 Aug 2022 13:33:07 +0000 (15:33 +0200)]
Refactor errno logging
* Macros to factor out common patterns.
* Minor error detection optimization at sites that happened to be nearby.
Change-Id: Ibd14776e5d52fa59c00098317bc8031fb351eb0b
Konrad Lipinski [Thu, 4 Aug 2022 14:07:37 +0000 (16:07 +0200)]
Release 1.7.5
* Add subsession bind mount isolation
Change-Id: Idee1eac89d529884900b97847b64ad239d4252b7
Konrad Lipinski [Tue, 26 Jul 2022 10:52:49 +0000 (12:52 +0200)]
Add subsession bind mount isolation
By introducing prepare_app2(app_id, subsession_id) and implementing
prepare_app(app_id) as prepare_app2(app_id, nullptr). Null subsession_id
indicates the default subsession.
The selected subsession is mounted over the "apps_rw" directory. Other
subsessions are hidden by mounting an empty directory over the user's
"subsession" directory if it exists.
Change-Id: I19c884bdd64c53b82fef3447470378c8a8cfae3e
Konrad Lipinski [Wed, 3 Aug 2022 10:15:39 +0000 (12:15 +0200)]
Release 1.7.4
* Drop std::function from try_catch() and friends, deficient edition
* Simplify socket-manager timeout logic
* Switch to CLOCK_MONOTONIC_COARSE
* Refrain from calling sessiond in offline mode
* Prioritize requests based on cpu boosting level
* Simplify service and IO thread's class hierarchies
* Make socket manager counters more robust
* Refactor MessageBuffer and dependencies
Change-Id: Id35cf58156eef658907b312df06637e51ce5e9dd
Konrad Lipinski [Mon, 16 May 2022 17:39:29 +0000 (19:39 +0200)]
Drop std::function from try_catch() and friends, deficient edition
When used as an argument to try_catch() and similar functions,
std::function may potentially introduce runtime overhead on the
exception-free path, possibly even allocate (and thus throw
std::bad_alloc).
This can be prevented by rewriting try_catch() as a generic wrapper with
perfect forwarding.
This has been coded deficiently on purpose, refusing to leverage any and
all kinds of bloat reduction opportunities. For the rationale, please
consult code review participants as I have none to give.
"I'm only following orders."
- A nameless soldier
Change-Id: I00adf24213a2e6bf8d148db8375a14200c64ff4f
Konrad Lipinski [Mon, 18 Jul 2022 08:14:44 +0000 (10:14 +0200)]
Simplify socket-manager timeout logic
The intention of the timeout logic is to close stale sockets (ones that
have been inactive for SOCKET_TIMEOUT seconds). The closure doesn't
really have to happen immediately after that, as long as it happens
eventually when, say, security-manager's IO thread wakes up.
* use select() without timeout
* replace timeout priority queue with generation-based management
* each generation lasts at least SOCKET_TIMEOUT seconds
* maintain per-socket activity booleans for the current generation
* a socket becomes active when performing or getting primed for IO
* when a new generation begins, loop through all sockets, time out all
inactive ones, set all remaining to inactive
Change-Id: I50a06f1566806fa9d7d69fe2367d6ade0f93acf5
Konrad Lipinski [Tue, 2 Aug 2022 07:35:50 +0000 (09:35 +0200)]
Switch to CLOCK_MONOTONIC_COARSE
All uses of clock_gettime() are fine with coarse granularity. Renamed
monotonicNow() to monotonicCoarseNow() to reflect that.
Change-Id: Id60e79ca28a888ad98907184b7c11dd9d0b4aeee
Konrad Lipinski [Thu, 28 Jul 2022 07:53:10 +0000 (09:53 +0200)]
Refrain from calling sessiond in offline mode
Change-Id: I0e182d45f75cc99cbc11d692c29e6c7c0bcc0719
Konrad Lipinski [Wed, 13 Jul 2022 14:46:48 +0000 (16:46 +0200)]
Prioritize requests based on cpu boosting level
There are three boosting levels at present, hence three distinct
priorities are introduced. Since the priority space is small, the
priority queue is implemented via an array of FIFO queues.
CPU priority inheritance from client to server is also included.
The boosting level and priority inheritance facilities are provided by
the capi-system-resource module. According to said facilities'
designers, querying the boosting level is most efficient when done
directly in the queried thread. Thus, when making a security manager
client request, the boosting level is obtained and prepended to the
request payload. This is also makes requests atomic and mitigates the
potential for priority races.
Change-Id: Icc10fb5e40fa74eafe16726d28ac66cd8b560810
Konrad Lipinski [Wed, 20 Jul 2022 11:57:14 +0000 (13:57 +0200)]
Simplify service and IO thread's class hierarchies
* get rid of useless Generic* and Base* classes that do nothing
* shift what little functionality they provided to other entities
* make a few leaf classes final
* devirtualize a few methods across the hierarchy, either by making them
local or via CRTP
* replace the virtual Event hierarchy and handlers by a single
statically known Event type
Change-Id: Id3afef98ff99a5b0eb3966f1cfdf0dcaa52cd909
Konrad Lipinski [Wed, 13 Jul 2022 13:25:52 +0000 (15:25 +0200)]
Make socket manager counters more robust
Now that the service no longer needs to maintain a dictionary of all
socket connections, socket counters no longer need to be globally
unique. The only remaining use for those counters now involves checking
whether a particular socket descriptor has gone stale. Per-descriptor
counters are enough for that, incremented every time a particular
descriptor is reopened.
* use per-socket counters instead of a global one
* use unsigned for guaranteed wraparound
* increment counter when closing instead of when opening to make the
check for isOpen unnecessary when checking connections enqueued in
m_closeQueue or m_writeBufferQueue
Change-Id: I5b9102c6fe3f9eb183ce456d1334173ac37aab4b
Konrad Lipinski [Tue, 12 Jul 2022 09:01:37 +0000 (11:01 +0200)]
Refactor MessageBuffer and dependencies
Security manager's protocol assumes there's at most one message in
flight per connection at any given time. The MessageBuffer class can
hold one such message in various stages of completion, assembled via
either input or serialization and disposed of via either output or
deserialization.
This conceptual interface can be satisfied in a much simpler way than
what's currently present. All that is require for a MessageBuffer is a
single contiguous memory block and a little management on the side
(the block's size, the message size, offset into the block).
Since the protocol has the payload size stored as a size_t header prior
to a message's payload, there's no need to even store it separately - it
can be stored before the payload, just as in the protocol.
Implications:
* less memory copying/shuffling
* read the full message directly into a buffer in binary form
* deserialize directly from that buffer (no Pop(), no copies)
* reuse the buffer space for serialization of the return message
* output the return message into the socket without copying
* socket manager now assembles full messages before handing them to the
service, at no performance hit
* one MessageEvent per socket instead of Accept/Close/Read/Write events
* no need for the service to maintain connection state - it now operates
on a per-message basis
Change-Id: I45f6009ce09ae2f852cfee86a32426389bcf7a30
Konrad Lipinski [Tue, 19 Jul 2022 10:56:07 +0000 (12:56 +0200)]
Release 1.7.3
* Decrease service thread lock thrashing
* Fix subsession paths
Change-Id: I5fafb902584edfb88b6566ace91126cbe44761fa
Konrad Lipinski [Wed, 13 Jul 2022 14:13:55 +0000 (16:13 +0200)]
Decrease service thread lock thrashing
By not releasing the lock right after wait() returns.
Change-Id: Ic689aed448b9a00370252be2b09d7cb653bdcdc5
Konrad Lipinski [Mon, 18 Jul 2022 10:22:49 +0000 (12:22 +0200)]
Fix subsession paths
* place the "subsession" dir in TZ_USER_HOME instead of TZ_USER_APP
* skip over the empty subsession as returned by sessiond
* add sharedRO paths if applicable
* refrain from labelling paths inside skelDir for local installations
* refactor related code to reduce redundancy and improve robustness
Change-Id: I2ede9f53f490c9bf57d390796e2ca5a1774f8a09
Konrad Lipinski [Fri, 15 Jul 2022 08:41:01 +0000 (10:41 +0200)]
Release 1.7.2
* Basic integration with sessiond
* Drop socket manager multi service support
* Handle signals locally in socket manager main loop
* Switch socket manager notification from pipe to eventfd
* Remove unused sendmsg functionality
Change-Id: I9f21d9709dd6d0b7d8b2e446590d738d7f6d7504
Tomasz Swierczek [Wed, 30 Mar 2022 11:40:54 +0000 (13:40 +0200)]
Basic integration with sessiond
Allow ~/subsession/$light_username/apps_rw/$pkgName as legal package
directories as needed by the lightweight multiuser feature.
New paths are in force ONLY for local app installation
(for SM_APP_INSTALL_LOCAL install type in security-manager's API).
Lacks bind-mounting per-user relevant datadirs (separation of user
data). This is supposed to be added at later stage.
Change-Id: Ia042e608781c139651578475c94d4283ddf70a47
Konrad Lipinski [Tue, 12 Jul 2022 14:01:11 +0000 (16:01 +0200)]
Drop socket manager multi service support
That feature has never been used, it's always been dead weight.
Security manager is a single service so that's unlikely to ever change.
Implications:
* no need to store/check interface ID
* one service per socket manager - less bookkeeping, simpler destructor
* socket descriptors now only apply to accepted sockets
Change-Id: I84ce915f0ff6929df45a40a0a8f5cbf7a4214694
Konrad Lipinski [Tue, 12 Jul 2022 11:36:59 +0000 (13:36 +0200)]
Handle signals locally in socket manager main loop
* replace SignalService with a local descriptor
* handle the descriptor directly in the main loop
* drop the now unused m_working and MainLoopStop()
White at it, also drop the harmful TEMP_FAILURE_RETRY when calling
close() on service sockets.
Change-Id: I172456d1762aaed4c4f0dd46a49732aa28d9c5d6
Konrad Lipinski [Tue, 12 Jul 2022 09:49:53 +0000 (11:49 +0200)]
Switch socket manager notification from pipe to eventfd
* use eventfd for a more efficient wakeup mechanism
* handle it directly in the manager thread to reduce thrashing
* drop the now useless DummyService and SIGPIPE-related code
* check m_working in the main loop only if eventfd is ready for reading
Change-Id: I090d90a50f3c789445dd6d0daa637abf0d189348
Krzysztof Jackiewicz [Thu, 7 Jul 2022 12:00:27 +0000 (14:00 +0200)]
Remove unused sendmsg functionality
Kind of reverts
0798413641b7961a0132050aef6bd03270936625
Change-Id: I815e63a370528762f69b760340398e068b541b74
Tomasz Swierczek [Wed, 18 May 2022 07:00:01 +0000 (09:00 +0200)]
Release 1.7.1
* Enhance DB recovery logic
* Minor fix of wording in comment
* Remove unused code
Change-Id: Ide32e4e3257810994bcb8dfe6695c455e5c0007f
Tomasz Swierczek [Thu, 28 Apr 2022 09:13:42 +0000 (11:13 +0200)]
Enhance DB recovery logic
"If we are wise, let us prepare for the worst."
- George Washington
Previously, the logic of DB recovery was:
1. Remove the "-recovered" file flag, IF it survived reboot (shouldn't)
2. Check DB for corruption
3. IF corruption occured, then:
a. Replace original DB with fallback made at image creation
b. Create the "-recovered" file next to DB file that signals rest of the system some apps may be missing
If sudden poweroff happens between 3a and 3b, system will not get informed
about missing app installation data.
This patch changes order of operations 3a and 3b, and also removes
operation number 1. From now on, the system-level scripts responsible
for recovery should remove the flag, when full recovery was complete.
Changing order of 3a with 3b ensures the flag is created when
DB error was found and is not prone to sudden power-off.
The flag is meant to be used for file-existance signalling of the need
to reinstall apps that were not in the backed-up DB. Since its existence
can trigger app installation, which in turn, can launch & use security-manager
(which will also attemt to access the DB), it MUST be ensured that rules-loader
is not running concurrently with any other processes/services that may use security-manager's DB
(the recovery of DB from fallback/backup has to be complete). This is achieved
by systemd's "Before=" service option in rules-loader service file which prohibits
security-manager's socket & service start before rules loader-ends operation.
Change-Id: I472c09d9398f69a97e118b69aad61dc016e3d22d
Tomasz Swierczek [Wed, 4 May 2022 06:42:32 +0000 (08:42 +0200)]
Minor fix of wording in comment
Change-Id: I48e795f72a7ca2ad720ea475c611d57d1007a622
Tomasz Swierczek [Wed, 30 Mar 2022 11:10:38 +0000 (13:10 +0200)]
Remove unused code
Change-Id: I7ae95050e5018d3a38ee79401553b46e3dfc849b
Tomasz Swierczek [Mon, 6 Dec 2021 11:05:47 +0000 (12:05 +0100)]
Release 1.7.0
Bump versioning to 1.7.X as tizen_6.0 has branched-off.
This change should be synced to tizen_6.5 branch, too.
Change-Id: Ibed180c8cbc9df8d96b3e0bf0188b8c3d6d5bf9f
Tomasz Swierczek [Wed, 3 Nov 2021 06:45:41 +0000 (07:45 +0100)]
Release 1.6.21
* Retry blocking waitpid() on EINTR
Change-Id: I20c9a73a6e7573dddc8d4b3495e74031e620d036
Konrad Lipinski [Fri, 29 Oct 2021 12:19:54 +0000 (14:19 +0200)]
Retry blocking waitpid() on EINTR
Change-Id: I0b7bcc0ce1964a229b77a8456266696f4ae0a80b
Jin-gyu Kim [Wed, 25 Aug 2021 19:22:30 +0000 (04:22 +0900)]
Release 1.6.20
* Adding privilege group priv_platform.
Change-Id: If9dc65658e85143ef77cd0d117cc4fd22124215c
Jin-gyu Kim [Wed, 25 Aug 2021 02:25:22 +0000 (11:25 +0900)]
Adding privilege group priv_platform.
Adding group for http://tizen.org/privilege/internal/default/platform
Change-Id: Ib8c4d82e08b48d6cb233a626960806fe0f69c4ae
Jin-gyu Kim [Thu, 24 Jun 2021 04:05:55 +0000 (13:05 +0900)]
Release 1.6.19
* Adding privilege group priv_peripheralio
* Make prepare_app() safer in non-main threads
Change-Id: I8d25212ea1ae5042b0a894b172884b49ce38f3b7
Jin-gyu Kim [Wed, 23 Jun 2021 02:01:00 +0000 (11:01 +0900)]
Adding privilege group priv_peripheralio.
Adding priv_peripheralio group for http://tizen.org/privilege/peripheralio
Change-Id: I2a8ef3344d4d4840b918f72a1a836bfc0be7a4ce
Konrad Lipinski [Mon, 7 Jun 2021 16:44:55 +0000 (18:44 +0200)]
Make prepare_app() safer in non-main threads
Calling prepare_app() from a non-main thread in a multithreaded
process could fail. While labels for other threads were being correctly
set by writing to /proc/<tid>/attr/current, the prepare_app thread used
smack_set_label_for_self() and thus /proc/self/attr/current.
This is easily fixed by reusing label_for_self_internal() so that all
threads are uniformly treated, each using its own tid.
Change-Id: Id5b3071b08057200331d64bf8d6cd172ae729df1
Yunjin Lee [Mon, 19 Apr 2021 05:06:41 +0000 (14:06 +0900)]
Release 1.6.18
* Add core privileges: usb.host and log
Change-Id: Ic5ede43127e8c194943e18846b4ec10d4da220e9
Yunjin Lee [Fri, 9 Apr 2021 04:29:36 +0000 (13:29 +0900)]
Add core privileges: usb.host and log
- usb.host: app can access to connected external USB devices
- log: app can access to platform log data
- both are platform level
- http://tizen.org/privilege/log is mapped to gid log
- http://tizen.org/privilege/usb.host is mapped to gid usb_device
Change-Id: I1726b463c077921071ff9b9f0348effe80ade38c
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
Yunjin Lee [Fri, 9 Apr 2021 01:42:50 +0000 (10:42 +0900)]
Release 1.6.17
* Fix issue from static analysis
Change-Id: I30597162967bc6bd2ee073030e4cd4cef82402b8