platform/core/security/security-manager.git
8 months agoRelease: 1.9.6 05/318605/2 accepted/tizen_unified_toolchain accepted/tizen/9.0/unified/20241030.233141 accepted/tizen/unified/20241008.173927 accepted/tizen/unified/toolchain/20241022.122517 accepted/tizen/unified/toolchain/20241022.122941 accepted/tizen/unified/x/20241009.055408 accepted/tizen/unified/x/asan/20241014.000118 tizen_9.0_m2_release
Krzysztof Jackiewicz [Thu, 3 Oct 2024 08:06:55 +0000 (10:06 +0200)]
Release: 1.9.6

* Revert "Fix tgkill retry logic"
* Set minimal cynara-admin version
* Optimization: batch cynara admin checks into one API call

Change-Id: I755213257aa8001b19bc67d106807349db06dc3f

8 months agoRevert "Fix tgkill retry logic" 18/318518/3
Krzysztof Jackiewicz [Tue, 1 Oct 2024 10:45:24 +0000 (12:45 +0200)]
Revert "Fix tgkill retry logic"

This reverts commit f4e8020905f10fbcb12a06060aab132d2e447f3f.

Apparently there are some failures/crashes in other modules only if the
reverted commit is used. Reverting temporarily. To be investigated
later.

Change-Id: I9bd9e6b7acff8868609e2a91823ac1e73f87ef22

8 months agoSet minimal cynara-admin version 07/318607/1
Krzysztof Jackiewicz [Thu, 3 Oct 2024 08:18:22 +0000 (10:18 +0200)]
Set minimal cynara-admin version

This is necessary as we started using the new cynara-admin API.

Change-Id: I4c660d22510326539c6e114fcbcf6d05307c558e

8 months agoOptimization: batch cynara admin checks into one API call 58/317558/7
Krzysztof Malysa [Wed, 11 Sep 2024 16:02:06 +0000 (18:02 +0200)]
Optimization: batch cynara admin checks into one API call

Although the optimization's focus is on minimizing latency under load it shows some improvements overall.

Before (on emulator):
  additionalThreads 32 nConcurrentApps 1 samples 94
    prepareAppCandidate [us]:              min 145 max 755 avg 470 median 459 stddev 72
    prepareApp [us]:                       min 25 424 max 76 408 avg 40 300 median 42 693 stddev 7 330
    prepareAppCandidate + prepareApp [us]: min 25 868 max 76 857 avg 40 770 median 43 166 stddev 7 337
  nConcurrentApps 1 samples 135
    prepareAppCandidate [us]:              min 146 max 1 102 avg 476 median 457 stddev 88
    prepareApp [us]:                       min 13 769 max 26 616 avg 21 278 median 20 438 stddev 1 968
    prepareAppCandidate + prepareApp [us]: min 13 916 max 27 718 avg 21 754 median 20 893 stddev 1 993
  nConcurrentApps 2 samples 216
    prepareAppCandidate [us]:              min 317 max 1 285 avg 522 median 500 stddev 114
    prepareApp [us]:                       min 12 992 max 34 919 avg 24 143 median 23 894 stddev 4 035
    prepareAppCandidate + prepareApp [us]: min 13 598 max 35 250 avg 24 666 median 24 419 stddev 4 028
  nConcurrentApps 4 samples 384
    prepareAppCandidate [us]:              min 85 max 4 969 avg 678 median 600 stddev 552
    prepareApp [us]:                       min 12 682 max 49 079 avg 25 782 median 24 161 stddev 6 644
    prepareAppCandidate + prepareApp [us]: min 12 824 max 49 732 avg 26 461 median 24 774 stddev 6 609
  nConcurrentApps 8 samples 672
    prepareAppCandidate [us]:              min 77 max 4 609 avg 512 median 435 stddev 397
    prepareApp [us]:                       min 12 260 max 59 107 avg 25 890 median 24 256 stddev 7 760
    prepareAppCandidate + prepareApp [us]: min 12 378 max 59 575 avg 26 403 median 24 723 stddev 7 795
  nConcurrentApps 16 samples 1168
    prepareAppCandidate [us]:              min 79 max 4 619 avg 317 median 220 stddev 355
    prepareApp [us]:                       min 12 656 max 57 372 avg 26 940 median 26 660 stddev 7 674
    prepareAppCandidate + prepareApp [us]: min 12 806 max 57 963 avg 27 257 median 26 958 stddev 7 725
  nConcurrentApps 32 samples 1824
    prepareAppCandidate [us]:              min 76 max 4 945 avg 184 median 136 stddev 287
    prepareApp [us]:                       min 12 589 max 87 912 avg 37 803 median 36 480 stddev 15 334
    prepareAppCandidate + prepareApp [us]: min 12 757 max 88 015 avg 37 987 median 36 606 stddev 15 379

After (on emulator):
  additionalThreads 32 nConcurrentApps 1 samples 100
    prepareAppCandidate [us]:              min 197 max 655 avg 444 median 434 stddev 62
    prepareApp [us]:                       min 30 372 max 44 675 avg 38 708 median 41 516 stddev 4 686
    prepareAppCandidate + prepareApp [us]: min 30 795 max 45 328 avg 39 152 median 41 924 stddev 4 684
  nConcurrentApps 1 samples 165
    prepareAppCandidate [us]:              min 83 max 803 avg 221 median 132 stddev 159
    prepareApp [us]:                       min 12 224 max 23 058 avg 15 407 median 13 172 stddev 3 727
    prepareAppCandidate + prepareApp [us]: min 12 319 max 23 638 avg 15 628 median 13 294 stddev 3 879
  nConcurrentApps 2 samples 356
    prepareAppCandidate [us]:              min 66 max 1 470 avg 104 median 90 stddev 111
    prepareApp [us]:                       min 11 949 max 20 065 avg 13 307 median 13 160 stddev 912
    prepareAppCandidate + prepareApp [us]: min 12 025 max 20 144 avg 13 412 median 13 261 stddev 907
  nConcurrentApps 4 samples 552
    prepareAppCandidate [us]:              min 72 max 696 avg 110 median 94 stddev 58
    prepareApp [us]:                       min 12 115 max 18 504 avg 14 116 median 14 030 stddev 1 305
    prepareAppCandidate + prepareApp [us]: min 12 251 max 18 756 avg 14 226 median 14 128 stddev 1 316
  nConcurrentApps 8 samples 984
    prepareAppCandidate [us]:              min 71 max 2 196 avg 135 median 103 stddev 155
    prepareApp [us]:                       min 11 948 max 25 692 avg 16 838 median 16 695 stddev 2 939
    prepareAppCandidate + prepareApp [us]: min 12 041 max 26 019 avg 16 974 median 16 814 stddev 2 952
  nConcurrentApps 16 samples 1184
    prepareAppCandidate [us]:              min 75 max 5 523 avg 401 median 227 stddev 584
    prepareApp [us]:                       min 12 035 max 54 686 avg 25 184 median 24 884 stddev 7 269
    prepareAppCandidate + prepareApp [us]: min 12 175 max 56 117 avg 25 585 median 25 202 stddev 7 398
  nConcurrentApps 32 samples 1760
    prepareAppCandidate [us]:              min 72 max 4 791 avg 262 median 157 stddev 451
    prepareApp [us]:                       min 12 654 max 87 433 avg 35 770 median 34 678 stddev 14 002
    prepareAppCandidate + prepareApp [us]: min 12 777 max 88 638 avg 36 033 median 34 875 stddev 14 108

Change-Id: I0f039cf9c5023b78830816f776f108afdc8e2134

8 months agoRelease 1.9.5 70/318270/2
Tomasz Swierczek [Thu, 26 Sep 2024 07:02:56 +0000 (09:02 +0200)]
Release 1.9.5

* Change usleep time from 2 ms to 10 ms
* Add warning log for actually receiving a request from socket
* Fix potential memory leak

Change-Id: I4e43bf5ee16bf83214802b1fe3cc898758b584e7

8 months agoChange usleep time from 2 ms to 10 ms 69/318269/2
Tomasz Swierczek [Thu, 26 Sep 2024 06:46:09 +0000 (08:46 +0200)]
Change usleep time from 2 ms to 10 ms

Apparently, the longer the sleep, less CPU time is used in heavy-load scenarios.

Change-Id: I79b89303eb14a74e699b7ba2e2980dd499dcb781

8 months agoAdd warning log for actually receiving a request from socket 82/318082/2
Tomasz Swierczek [Tue, 24 Sep 2024 10:00:55 +0000 (12:00 +0200)]
Add warning log for actually receiving a request from socket

Needed by VD to investigate few issues with performance on slower boards.

Change-Id: I3d0ba83303b4897212afe1dd100eef26a160f27a

9 months agoFix potential memory leak 57/317557/1
Krzysztof Malysa [Wed, 11 Sep 2024 15:51:32 +0000 (17:51 +0200)]
Fix potential memory leak

Change-Id: I6a14537d3e510046b37603aa99e75f8f96b3a845

9 months agoRelease 1.9.4 54/317454/2 accepted/tizen_unified_dev accepted/tizen/8.0/unified/20240913.151459 accepted/tizen/unified/20240911.161942 accepted/tizen/unified/dev/20240913.055518 accepted/tizen/unified/toolchain/20241004.101746 accepted/tizen/unified/x/20240912.013758
Dariusz Michaluk [Tue, 10 Sep 2024 11:25:10 +0000 (13:25 +0200)]
Release 1.9.4

* Add core privilege: isu.admin
* Add unit tests for increased coverage
* Fix tgkill retry logic

Change-Id: I5a1d33a07134d9d747912b0c26c9c5ffd08a4313

9 months agoAdd core privilege: isu.admin 45/317445/1
Mateusz Moscicki [Tue, 10 Sep 2024 08:30:23 +0000 (10:30 +0200)]
Add core privilege: isu.admin

Change-Id: I71d23fe21f9b82226d5604e5a173608068715c19

9 months agoAdd unit tests for increased coverage 48/316448/2
Tomasz Swierczek [Wed, 21 Aug 2024 10:28:05 +0000 (12:28 +0200)]
Add unit tests for increased coverage

Change-Id: Ifbb5ad446b4aa4c2d350f630ea713cd2d7bbbb9d

10 months agoFix tgkill retry logic 75/314875/2
Krzysztof Jackiewicz [Mon, 22 Jul 2024 09:56:11 +0000 (11:56 +0200)]
Fix tgkill retry logic

If second tgkill attempt after EAGAIN succeeds, the abort() would still
be called. This commit fixes it.

Change-Id: I507c32188924fbb38f521c5d7fd1c1897c7ce534

11 months agoRelease 1.9.3 17/314417/1 accepted/tizen/unified/20240712.160116 accepted/tizen/unified/dev/20240715.080544 accepted/tizen/unified/toolchain/20240812.132959 accepted/tizen/unified/x/20240715.042510 accepted/tizen/unified/x/asan/20240813.231250
Tomasz Swierczek [Thu, 11 Jul 2024 09:57:03 +0000 (11:57 +0200)]
Release 1.9.3

* Add more warning logs for performance analysis on release builds
* Remove pkg existance check in labelPaths function
* Remove unused function

Change-Id: If9efe93e4ffb4e2019724c258632ff6d60086dba

11 months agoAdd more warning logs for performance analysis on release builds 86/314186/2
Tomasz Swierczek [Mon, 8 Jul 2024 07:40:50 +0000 (09:40 +0200)]
Add more warning logs for performance analysis on release builds

Change-Id: Ie83e2768d4da2208e1e4666b2c1969b2c38e2a6a

11 months agoRemove pkg existance check in labelPaths function 87/314187/2
Tomasz Swierczek [Mon, 8 Jul 2024 07:42:44 +0000 (09:42 +0200)]
Remove pkg existance check in labelPaths function

The function is called 2 out of 3 times in places
where the package was already added (appInstall, appUpdate),
so no check is needed.

Added the check manually before function call in registering paths API,
where in fact we need to return invalid param for backward compatibility.

Change-Id: I7fb8b967409972ef1f0734f40320682b6bf6cc1b

12 months agoRemove unused function 33/312533/1
Krzysztof Jackiewicz [Tue, 11 Jun 2024 08:21:44 +0000 (10:21 +0200)]
Remove unused function

Change-Id: I07191ea6a8a7632c7f0446fe5724eea678dae0f2

12 months agoRelease 1.9.2 accepted/tizen/8.0/unified/20240614.162128 accepted/tizen/unified/20240603.032414 accepted/tizen/unified/dev/20240620.005646 accepted/tizen/unified/toolchain/20240624.121447 accepted/tizen/unified/x/20240604.013000 accepted/tizen/unified/x/asan/20240625.092453
Tomasz Swierczek [Fri, 31 May 2024 04:38:47 +0000 (06:38 +0200)]
Release 1.9.2

* Add core privilege: keymanager.extended

Change-Id: Ib758362fe042a0d25f599a70304be926c8637897

12 months agoAdd core privilege: keymanager.extended 15/311315/1
Dariusz Michaluk [Fri, 17 May 2024 11:08:34 +0000 (13:08 +0200)]
Add core privilege: keymanager.extended

- keymanager.extended (platform level): app can use extended CKMC API

Change-Id: I1eee03db7511a7bbf18daf5dcc979857f258a4cf

13 months agoRelease 1.9.1 68/309868/1 accepted/tizen/8.0/unified/20240419.170006 accepted/tizen/unified/20240423.164619 accepted/tizen/unified/x/20240425.051117
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

13 months agoAdd mitigation for DDOS attack 59/309859/2
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

14 months agoAdjust coverage script after lcov upgrade 90/309190/1
Dariusz Michaluk [Fri, 5 Apr 2024 10:07:43 +0000 (12:07 +0200)]
Adjust coverage script after lcov upgrade

Change-Id: I5e02bfd884ea1fa8b6f96796bcaea143ac6eb10c

15 months agoRelease 1.9.0 44/306544/1 accepted/tizen/8.0/unified/20240227.172259 accepted/tizen/unified/20240223.160530 accepted/tizen/unified/toolchain/20240311.065531 accepted/tizen/unified/x/20240226.075419
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

15 months agoAdd core privilege: wifi.secureinfo 42/306342/1
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

16 months agoRelease 1.8.14 accepted/tizen_unified_riscv accepted/tizen/8.0/unified/20240118.170034 accepted/tizen/unified/20240117.163258 accepted/tizen/unified/riscv/20240118.054545
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

16 months agoRemoved unnecessary bloat & fix readme
Tomasz Swierczek [Mon, 15 Jan 2024 14:39:30 +0000 (15:39 +0100)]
Removed unnecessary bloat & fix readme

Change-Id: Iafa766759f035a2b9f5d4232d0b16eac46781f4e

18 months agoModified error log in case of failed relabel_self setup
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

18 months agoAdd unit tests for permissible file update, initialization and removal
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

18 months agoImplement a mechanism for permissible file repair
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

18 months agoImplement permissible file integrity verification
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

18 months agoRelease 1.8.13 accepted/tizen/8.0/unified/20231212.161348 accepted/tizen/unified/20231130.180925 accepted/tizen/unified/riscv/20231226.211352
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

18 months agoRework security_manager_sync_threads_internal() 66/301866/12
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

18 months agoRelease 1.8.12 42/301842/1 accepted/tizen/unified/20231127.165002
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

18 months agoAdd even more logs around IPC 41/301841/1
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

18 months agoRelease 1.8.11 82/301482/1 accepted/tizen/8.0/unified/20231117.165421 accepted/tizen/unified/20231122.172547
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

18 months agoAdd better logs around IPC 81/301481/2
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

19 months agoRelease 1.8.10 47/300147/2 accepted/tizen/8.0/unified/20231027.023627 accepted/tizen/unified/20231026.032433
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

19 months agoAdd mitigation for long processing of signals in VD's environments 45/300145/3
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

21 months agoRelease 1.8.9 85/298085/1 accepted/tizen/8.0/unified/20231005.093706 accepted/tizen/unified/20230907.055346 tizen_8.0_m2_release
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

21 months agoCreate DB file backup in case it was discovered to be corrupted 49/297649/16
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

21 months agoFix app-defined privileges certificate verification 79/297979/1
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

21 months agoMigrate to openssl3 95/295695/2
Dariusz Michaluk [Wed, 12 Jul 2023 10:13:04 +0000 (12:13 +0200)]
Migrate to openssl3

Change-Id: Ibab2eed97c6011e303433e48322b3f00fbb48a62

22 months agoRelease 1.8.8 78/296778/1 accepted/tizen/7.0/unified/20230808.014650 accepted/tizen/unified/20230808.011405
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

22 months agoFix error checking for open 55/296755/2
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

22 months agoRelease 1.8.7 81/296181/1 accepted/tizen/7.0/unified/20230726.165535 accepted/tizen/unified/20230725.013002
Krzysztof Jackiewicz [Fri, 21 Jul 2023 08:56:28 +0000 (10:56 +0200)]
Release 1.8.7

* Improve threads' privilege synchronisation

Change-Id: I178bee9a70016bf29ac62de67576b3580ecbdf9b

22 months agoImprove threads' privilege synchronisation 96/296096/3
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

23 months agoRelease 1.8.6 accepted/tizen/7.0/unified/20230713.041539 accepted/tizen/unified/20230713.014423
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

23 months agoRevert "Change the signal used by security-manager prepare_app implementation"
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

23 months agoRelease 1.8.5 99/295499/5
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

23 months agoIncrease waiting time for threads to receive signal 98/295498/5
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

23 months agoChange the signal used by security-manager prepare_app implementation 45/295445/7
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

23 months agoFix an ugly bug in printing debug information about threads 38/295438/6
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

23 months agoRelease 1.8.4 78/295378/1 accepted/tizen/unified/20230710.013127 accepted/tizen/unified/dev/20230726.115819
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

23 months agoFix static analysis issues 77/295377/1
Tomasz Swierczek [Thu, 6 Jul 2023 07:26:13 +0000 (09:26 +0200)]
Fix static analysis issues

Change-Id: I90839d874efd4e8b53a7c30870182fbf83c8c248

23 months agoFix build for new toolchain 71/295371/1
Tomasz Swierczek [Thu, 6 Jul 2023 07:05:04 +0000 (09:05 +0200)]
Fix build for new toolchain

Change-Id: I156cf22c4a752057490a6d6d7fbe040358fc933d

23 months agoAdd additional debug information in prepare_app 27/295327/8
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

23 months agoRelease 1.8.3 53/294353/4 accepted/tizen/7.0/unified/20230621.051147 accepted/tizen/unified/20230621.023259
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

23 months agoChange the way threads are checked at the end of prepare_app call 03/294203/9
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

2 years agoRelease 1.8.2 91/293491/2 accepted/tizen/7.0/unified/20230602.171936 accepted/tizen/unified/20230605.170324
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

2 years agoAbort app candidate process in case of wrong setup 90/293490/2
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

2 years agoRelease 1.8.1 accepted/tizen/7.0/unified/20230525.170523
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

2 years agoOptimize operations on file with list of Smack labels 54/292454/14
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

2 years agoChange order of items checking during getDirectoryContents() loop 44/292244/1
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

2 years agoSmall fixes in unit tests 76/288776/2
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

2 years agoRelease 1.8.0 75/288675/1
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

2 years agoRelease 1.7.13 73/287673/1 accepted/tizen/7.0/unified/20230203.164158 accepted/tizen/unified/20230206.093841 accepted/tizen/unified/20230206.093957
Tomasz Swierczek [Thu, 2 Feb 2023 06:28:39 +0000 (07:28 +0100)]
Release 1.7.13

* Fix static analysis

Change-Id: I04137e1db4e557a6b4cdc828541773a2fad9b955

2 years agoFix static analysis 19/287319/4
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

2 years agoRelease 1.7.12 28/285928/2 accepted/tizen/7.0/unified/20221223.170228 accepted/tizen/unified/20221226.020939
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

2 years agoChange some logs into warnings 25/285625/2
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

2 years agoRelease 1.7.11 30/284830/2 accepted/tizen/7.0/unified/20221129.084000 accepted/tizen/unified/20221129.172510
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

2 years agoAdd additional logs to security-manager 29/284829/2
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

2 years agoRelease 1.7.10 50/284650/2 accepted/tizen/7.0/unified/20221124.171202 accepted/tizen/unified/20221124.015431
Tomasz Swierczek [Tue, 22 Nov 2022 09:53:19 +0000 (10:53 +0100)]
Release 1.7.10

* Disable LTO

Change-Id: If7bb805b212c5574a6cb501cb3893c2f037c9235

2 years agoDisable LTO 49/284649/2
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

2 years agoRelease 1.7.9 52/284152/1 tizen_7.0_unified accepted/tizen/unified/20221118.021706
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

2 years agoChange delay for setting cpu_inheritance 51/284151/1
Tomasz Swierczek [Thu, 10 Nov 2022 14:31:08 +0000 (15:31 +0100)]
Change delay for setting cpu_inheritance

Change-Id: If46ba6429226c4fcd7a64179fb93d715c84f1635

2 years agoRelease 1.7.8 62/283062/2 accepted/tizen/unified/20221102.020605
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

2 years agoChange logic of security_manager_app_update() 61/283061/2
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

2 years agoRelease 1.7.7 57/280957/1 accepted/tizen_7.0_unified_hotfix tizen_7.0_hotfix accepted/tizen/7.0/unified/20221110.061233 accepted/tizen/7.0/unified/hotfix/20221116.105634 accepted/tizen/unified/20220915.173202 accepted/tizen/unified/20220916.022052 accepted/tizen/unified/20220916.022130 tizen_7.0_m2_release
Tomasz Swierczek [Wed, 7 Sep 2022 06:33:51 +0000 (08:33 +0200)]
Release 1.7.7

* Appease SVACE

Change-Id: If5cdbb74949e2728859bbdb73be17a6626f05b4d

2 years agoAppease SVACE 58/280158/1
Konrad Lipinski [Wed, 24 Aug 2022 12:07:36 +0000 (14:07 +0200)]
Appease SVACE

Change-Id: I9da1046731377e5c47096f34769f38aa67a23ae2

2 years agoRelease 1.7.6 55/279555/2 accepted/tizen/unified/20220817.153738 submit/tizen/20220811.131445 submit/tizen/20220816.102758
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

2 years agoFix out of bounds socket description vector access 46/279546/1
Konrad Lipinski [Thu, 11 Aug 2022 08:50:44 +0000 (10:50 +0200)]
Fix out of bounds socket description vector access

Change-Id: Iacfa7ad31ad1aa5e7f4743fc114e283acc58af8e

2 years agoDelay service thread construction until dependencies are initialized 45/279545/1
Konrad Lipinski [Thu, 11 Aug 2022 08:30:16 +0000 (10:30 +0200)]
Delay service thread construction until dependencies are initialized

Change-Id: I386c56804eae770e0bb90acbecc705d14010d804

2 years agoDecrease message buffer test payload size to avoid bad_alloc 17/279517/1
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

2 years agoRefactor errno logging 95/279395/3
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

2 years agoRelease 1.7.5 58/279258/1 accepted/tizen/unified/20220804.151648 accepted/tizen/unified/20220805.131919 submit/tizen/20220803.102654 submit/tizen/20220804.142848
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

2 years agoAdd subsession bind mount isolation
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

2 years agoRelease 1.7.4 04/279204/1
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

2 years agoDrop std::function from try_catch() and friends, deficient edition 00/276900/2
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

2 years agoSimplify socket-manager timeout logic 24/279124/3
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

2 years agoSwitch to CLOCK_MONOTONIC_COARSE 23/279123/3
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

2 years agoRefrain from calling sessiond in offline mode 34/278934/3
Konrad Lipinski [Thu, 28 Jul 2022 07:53:10 +0000 (09:53 +0200)]
Refrain from calling sessiond in offline mode

Change-Id: I0e182d45f75cc99cbc11d692c29e6c7c0bcc0719

2 years agoPrioritize requests based on cpu boosting level 09/277809/15
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

2 years agoSimplify service and IO thread's class hierarchies 51/278451/5
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

2 years agoMake socket manager counters more robust 05/277805/9
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

2 years agoRefactor MessageBuffer and dependencies 03/277803/9
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

2 years agoRelease 1.7.3 51/278351/1 accepted/tizen/unified/20220720.064051 submit/tizen/20220719.015501
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

2 years agoDecrease service thread lock thrashing 07/277807/5
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

2 years agoFix subsession paths 85/278285/3
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

2 years agoRelease 1.7.2 58/277958/1 accepted/tizen/unified/20220718.140340 accepted/tizen/unified/20220719.014554 submit/sessiond/20220715.092836 submit/tizen/20220715.093042 submit/tizen/20220718.045828 submit/tizen/20220718.115742
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

2 years agoBasic integration with sessiond 87/277887/2
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

2 years agoDrop socket manager multi service support 37/277737/3
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