Yunjin Lee [Wed, 27 Feb 2019 09:16:28 +0000 (18:16 +0900)]
Add core privilege: windowsystem.admin
- The application with this privilege can change the settings for
services provided by display server, such as the quick panel and softkey
bar.
Change-Id: Ic0d441a820f687d1e36cfe20e7e3ca8a485168d1
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
Konrad Lipinski [Thu, 14 Mar 2019 09:44:14 +0000 (10:44 +0100)]
Make waitpid(WNOHANG) call more explicit to appease SVACE
Change-Id: I63e7bddca2a729658d9ab8da94587a1780c7d32b
Tomasz Swierczek [Tue, 5 Mar 2019 08:18:04 +0000 (09:18 +0100)]
Release 1.5.0
* Replace time(NULL) with monotonic clock usage
* Enhance logs in case of writing errors
This release changes numbering to differentiate older branches of code.
tizen branch will continue to use 1.5.X numbering while tizen_5.0 version
will contininue to use 1.4.X numbering (for bugfixes/maintenance).
Change-Id: I752e69c738e565de27c5097381cbb11b2ac6ad48
Tomasz Swierczek [Tue, 5 Mar 2019 07:14:11 +0000 (08:14 +0100)]
Replace time(NULL) with monotonic clock usage
Calculating timeout for socket connections should
use monotonic clock.
Change-Id: Ie791173cf2663fdf0b94381f391bd5504b3e5e06
Tomasz Swierczek [Tue, 5 Mar 2019 06:26:04 +0000 (07:26 +0100)]
Enhance logs in case of writing errors & socket problems
In rare case security-manager is closing connections to clients
and after that, it tries to write responses to already closed connections.
With these enhanced logs it would be possible to match if the closed connections
(already appearing in logs) are for same socket number like ignored packets.
Change-Id: Ia105c8731d64d83d8d83182e12ae8adee1b961f0
Tomasz Swierczek [Wed, 13 Feb 2019 06:15:11 +0000 (07:15 +0100)]
Release 1.4.14
* Force logging server-side write() and close() operations
* Add logging response buffer size in debug mode
Change-Id: I8ccbbe45a48e14c7ee43781a7a5c71242fa85c09
Tomasz Swierczek [Tue, 12 Feb 2019 09:24:34 +0000 (10:24 +0100)]
Force logging server-side write() and close() operations
In some cases on TV, client gets 0 from recv while it should receive
an int with status from server. At the same time, there are no error
logs from server side and no issues with systemd service perceived.
This patch is a temporary solution to force logging relevant actions
on server side, to check whether server actually properly processes data.
Logs were added as ErrorLog to make sure these are visible during robustness
tests of TV (where platform code is synced automatically).
This patch WILL BE REVERTED after 31.03
Change-Id: I9284c42b87e49d333261a4dde7aedeae5261343c
Tomasz Swierczek [Tue, 12 Feb 2019 09:12:01 +0000 (10:12 +0100)]
Add logging response buffer size in debug mode
Change-Id: I551b93aadc5b09b252bb0a0c2a9433c3f57f6491
Dariusz Michaluk [Fri, 11 Jan 2019 10:37:38 +0000 (11:37 +0100)]
Release 1.4.13
* Apply db fallback is present and the db is an empty file
* Loader: add pragma legacy_alter_table for compatibility with sqlite 3.25.2+
* Add missing spaces in log messages
Change-Id: I236b26abb46ad0e8302127e6cb95f7b086220c8d
Konrad Lipinski [Wed, 9 Jan 2019 12:33:23 +0000 (13:33 +0100)]
Apply db fallback is present and the db is an empty file
Change-Id: Idfa81003639c5452ae85e79257aa5425547d42ea
Konrad Lipinski [Thu, 10 Jan 2019 16:46:20 +0000 (17:46 +0100)]
Loader: add pragma legacy_alter_table for compatibility with sqlite 3.25.2+
Change-Id: Iad4595cb9a12b3ebb23beca092b3057502ef822c
Pawel Kowalski [Tue, 8 Jan 2019 08:31:06 +0000 (09:31 +0100)]
Add missing spaces in log messages
Change-Id: I6b99ba86b6d2511067a4ac00a082c6584a952d04
Yunjin Lee [Wed, 19 Dec 2018 01:43:16 +0000 (10:43 +0900)]
Release: 1.4.12
* Add core privileges
* Set nullptr to reused data pointer
* Fix issues raised by static analysis
* Change local permissible file location to use UID rather than username
Change-Id: If59a47236554892817a389b3433548a8a59db782
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
Yunjin Lee [Tue, 18 Dec 2018 05:47:17 +0000 (14:47 +0900)]
Add core privileges
- autofillmanager: The application with this privilege can manage
installed autofill services. It can set which autofill service to use
and get the currently configured autofill service.
- internal/buxton/systemsettings: Internal privilege to fix
Web setting privilege's level mismatched mapping to the core
systemsettings.admin privilege. The application with this privilege
can read and write buxton keys for homescreen/lockscreen bg image,
incoming call ringtone, and email notification alert tone.
- filesystem,read, filesystem.write: Web filesystem.read and
filesystem.write are public level privilege and native
systemsettings.admin is platform level privilege. They were mapped
because of the 2.X smack rules but checked that Web
filesystem.read/write privileged device APIs are not wrappers of native
systemsetting.admin privileged APIs. Hence add core privilege for
filesystem.read and write separately and remove mapping to the
systemsettings.admin.
Change-Id: I73047f251c280d554ab13b3449eaa768a7ef7a86
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
Zofia Grzelewska [Tue, 11 Dec 2018 10:11:21 +0000 (11:11 +0100)]
Set nullptr to reused data pointer
Data pointer is reused in a loop and should be set to nullptr
after freeing
Change-Id: If4ab9dd89db73f0dc110279e40bd5608a0eee9d0
Konrad Lipinski [Mon, 26 Nov 2018 13:43:37 +0000 (14:43 +0100)]
Fix issues raised by static analysis
Change-Id: I8d8877f933335bf03511264576e15e75896e7411
Tomasz Swierczek [Thu, 15 Nov 2018 06:22:26 +0000 (07:22 +0100)]
Change local permissible file location to use UID rather than username
This is a protection against possible malicious user names.
Change-Id: I4a254fc4f9976fd9bc85d9d4488ba0b49a039da7
Dariusz Michaluk [Thu, 22 Nov 2018 09:54:32 +0000 (10:54 +0100)]
Release 1.4.11
* Protect security_manager_app_has_privilege with privilege check
* Check some poll() and mount() errors
* Fix documentation headers with required privilege descriptions
* Fix function name spelling error
* Change config.cpp variables to #define
Change-Id: I671eb10c1958b076a8bda3e1bae00c3db8c1539f
Tomasz Swierczek [Thu, 15 Nov 2018 08:59:13 +0000 (09:59 +0100)]
Protect security_manager_app_has_privilege with privilege check
This API serves similar data like fetching policy but wasn't protected
with privilege check. This change introduces the same entry checks.
Change-Id: I3fb2be619d05ebc770fd5c3b994baa13ff07c2a0
Konrad Lipinski [Thu, 15 Nov 2018 14:26:40 +0000 (15:26 +0100)]
Check some poll() and mount() errors
Change-Id: I62a7769a70dd35f5cfb8ba781216318105844e3f
Tomasz Swierczek [Thu, 15 Nov 2018 09:22:19 +0000 (10:22 +0100)]
Fix documentation headers with required privilege descriptions
Change-Id: I51a92ec289cdd82cbb8ca5caeaad7ef8bd29f50f
Tomasz Swierczek [Wed, 14 Nov 2018 13:20:54 +0000 (14:20 +0100)]
Fix function name spelling error
Change-Id: I66849856b28519b299cd2cc05e55fb3111ce67de
Tomasz Swierczek [Wed, 14 Nov 2018 05:58:28 +0000 (06:58 +0100)]
Change config.cpp variables to #define
security-manager may be used in processes with many threads.
Destruction of global variables may be in race condition with
child thread's operation & usage of these variables.
While such problem should be fixed in proper threads management,
there may be problems with open-source components that we may
not easily modify (and security-manager provides nss plugin
that may be used in unexpected places).
Change-Id: I057abc0bd2ed8a82d74f3777f6b95d386bc9b9f4
Tomasz Swierczek [Fri, 2 Nov 2018 05:53:45 +0000 (06:53 +0100)]
Release 1.4.10
* Replace runtime production/test db choice with compile-time policy
* Replace smack rule storage with straight-from-db rule loader
* Optimize package installation
* Prevent smack rules leaking during multi-app hybrid pkg uninstall
* Enable additional sqlite pragmas for robustness
Change-Id: Ic7132eef89713d3fb3f41053b156dacf73b28c2f
Konrad Lipinski [Mon, 15 Oct 2018 07:31:41 +0000 (09:31 +0200)]
Replace runtime production/test db choice with compile-time policy
Change-Id: Ia13c7ec92f0ffdf4c2341b395a31b8097b4eeddd
Konrad Lipinski [Fri, 14 Sep 2018 12:14:17 +0000 (14:14 +0200)]
Replace smack rule storage with straight-from-db rule loader
Details:
* remove %{TZ_SYS_VAR}/security-manager/rules{,-merged} directories
* add security-manager-rules-loader that
** performs database migration/recovery
** writes smack rules from a coherent database directly to load2
* add generate-rule-code generator that translates rule templates
(*.smack files) into c++ code for use in the loader
* remove security-manager-init-db binary and replace its invocation with
sh$ security-manager-rules-loader no-load
* replace dd invocation with security-manager-rules-loader in the rule
loader service
* add explicit dependency to ensure the loader runs before the manager
* refactor manager code
** remove the majority of database migration/recovery code on grounds of
loader having run beforehand
** replace defensive remnants of said code with an emergency invocation
sh$ security-manager-rules-loader fallback-only
to apply fallback on database schmea errors
** remove rule file maintenance (not needed anymore)
TODO:
* *.smack template files are still used by the manager at runtime,
removing them is optional and would require a substantial refactor
best placed in a separate commit
Pros:
* optimize flash usage (rule files were prone to quadratic explosion)
* solve database-rulefiles coherence problem
* make the rule loader performance more scalable and typically better
* simplify and speed up the manager a bit by dropping rule file code
Change-Id: I7d79d5ec7e66c9dfe6563dbb3f76bf6ab6669589
Konrad Lipinski [Thu, 4 Oct 2018 11:56:14 +0000 (13:56 +0200)]
Optimize package installation
appInstallSmackRules no longer updates the same rules repeatedly for
non-hybrid packages with multiple applications (every application has
the same process label so it's enough to do just one).
Change-Id: I4ba581a9ad5c297f87d591c647a6c56780d4978a
Konrad Lipinski [Wed, 3 Oct 2018 09:12:31 +0000 (11:12 +0200)]
Prevent smack rules leaking during multi-app hybrid pkg uninstall
Package hybridity would be detected after database modifications and
change from 1 to 0 for the last application as a result, leading to
wrong process labels being considered (User::Pkg::$pkgName as opposed
to User::Pkg::$pkgName::App::$appName).
Hybridity is now checked ahead of time to prevent the issue.
Change-Id: Ibe08d443d5fe29d36dabd6df023123da82286d21
Konrad Lipinski [Fri, 14 Sep 2018 12:14:17 +0000 (14:14 +0200)]
Enable additional sqlite pragmas for robustness
Change-Id: Ideaa585912143665ba9e288506af9d41679b029b
Tomasz Swierczek [Thu, 27 Sep 2018 11:02:05 +0000 (13:02 +0200)]
Release 1.4.9
* Add privilege for checking app permission
Change-Id: I4ae3a5301442f05de06554de3673d25e03f670d5
Pawel Kowalski [Mon, 24 Sep 2018 12:27:50 +0000 (14:27 +0200)]
Add privilege for checking app permission
New privilege http://tizen.org/privilege/permission.check was added
to enable the requesting app to check the permission of other app.
Change-Id: Ia0123e4716496852609371c228a41a477e94959e
Tomasz Swierczek [Thu, 20 Sep 2018 05:07:19 +0000 (07:07 +0200)]
Release 1.4.8
* Fix security-manager/libsecurity-manager-client cyclic dependency
Change-Id: I5b3b2bd33e7e1b08e4323001fbb1837effaa9666
Dariusz Michaluk [Mon, 17 Sep 2018 12:16:33 +0000 (14:16 +0200)]
Fix security-manager/libsecurity-manager-client cyclic dependency
Change-Id: Ic4c66e520964b54a1f8f6cc273517405d29b6b6a
Tomasz Swierczek [Tue, 18 Sep 2018 12:03:10 +0000 (14:03 +0200)]
Release 1.4.7
* Fix build break with 1.65.1 boost version
Change-Id: If2738dfc0ab73111520655c6a6cf75e3aaafcd41
Lukasz Wojciechowski [Tue, 18 Sep 2018 11:50:48 +0000 (13:50 +0200)]
Fix build break with 1.65.1 boost version
This is a quick syntax fix. In other places of security-manager tests
a colon is used after BOOST_GLOBAL_FIXTURE macro usage, see:
tests/security-manager-tests.cpp:53:BOOST_GLOBAL_FIXTURE(TestConfig);
tests/security-manager-tests.cpp:54:BOOST_GLOBAL_FIXTURE(LogSetup);
The macro should be replaced anyway as it is deprecated according
to the boost documentation:
https://www.boost.org/doc/libs/1_65_1/libs/test/doc/html/boost_test/utf_reference/test_org_reference/test_org_boost_global_fixture.html
Change-Id: Ib0ee486ae617b83b6f2e66a1b9b0d158b7cbfbec
Signed-off-by: Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Yunjin Lee [Mon, 17 Sep 2018 05:05:22 +0000 (14:05 +0900)]
Release 1.4.6
* Add core privilege: updatecontrol.admin and permission.check
Change-Id: Ic5cdbb475338ca26a37e3cc9b60bd6944563dba7
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
Yunjin Lee [Mon, 17 Sep 2018 04:46:03 +0000 (13:46 +0900)]
Add core privilege: updatecontrol.admin and permission.check
- updatecontrol.admin allows app to control system software update
procedure
- permission.check allows app to get other apps' permission statuses
Change-Id: I122c9734f9e5bc8b17387724cc05146193f3fd8c
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
Dariusz Michaluk [Thu, 13 Sep 2018 13:19:48 +0000 (15:19 +0200)]
Release 1.4.5
* Move standard users group management from GUM to security-manager
* Lazily initialize variables that need tz-platform-config
* Attempt database fallback recovery on some schema errors
* Change naming of recovery-management file & functions
* Optimize application uninstallation
* Simplify array size calculation
* Prefer std::vector::emplace_back to push_back in db code
Change-Id: I51d8c32ae4ff0ad40408440526c02c7575350d0f
Karol Lewandowski [Wed, 12 Sep 2018 14:33:53 +0000 (16:33 +0200)]
Move standard users group management from GUM to security-manager
Till now users created with "gum" tools were added
to predefined set of supplementary groups - audio,
display, video. This gave the users needed permissions
to access to various device nodes.
Unfortunately, this model does not work with multiple
"passwd/group" databases - /etc/{passwd,group} on read-only
storage, /opt/etc/{passwd,group} on read-writable storage.
This is because to assign user 'kitty' to the some system
group - defined in /etc/group, this file would need to be
modified, i.e.
video:x:44:media,system,multimedia_fw,owner,kitty
As noted - this can not be done because /opt/group is
supposed to be on read-only storage.
To address this issue security manager is used. It does
already provide NSS module which can assign logged in users
to predefined groups. The groups membership is based on
privileges assigned to given user type.
This commit:
- introduces three new privileges
- introduces mapping from new privileges to Unix groups
- assigns the new privileges to 'admin', 'normal', 'security',
'system' & 'guest' users
- adds the new privileges to global & local manifests
Change-Id: I465acc69cfa92bd4162f5aa603696bdfa7ace64e
Krzysztof Jackiewicz [Wed, 29 Aug 2018 13:12:11 +0000 (15:12 +0200)]
Lazily initialize variables that need tz-platform-config
Recent change in tz-platform-config made it use libc API for accessing
passwd/groups databases. As a result, each call to tz-platform-config will make
NSS load security-manager's NSS plugin with all dependent libraries initializing
their global variables.
The common library which is linked with nss plugin initializes two global
variables that use tz-platform-config which will lead to recursive call
prohibited by NSS.
This commit makes these variables lazily initialized to avoid the call to
tz-platform-config in security-manager's nss plugin initialization.
Change-Id: Ie290051f3d3d11c1b5f980d2cba683350a639042
Konrad Lipinski [Thu, 30 Aug 2018 14:04:38 +0000 (16:04 +0200)]
Attempt database fallback recovery on some schema errors
Done per HQ request for extra robustness in the face of unforeseen
database corruption.
Schema error detection amounts to preparing sqlite query templates. It
takes place at the end of database connection bringup (once the database
is verified to be up to date and passes integrity checks) by means of
calling sqlite3_prepare_v2 for every statement template ever to be used
at runtime. Sqlite statement compilation may fail due to lack of schema
compatibility. If such a failure occurs, fallback recovery is attempted
unless already tried.
Change-Id: I6ef8a262f8db11552f3e92ed3a601227558c3899
Tomasz Swierczek [Tue, 28 Aug 2018 08:35:19 +0000 (10:35 +0200)]
Change naming of recovery-management file & functions
The flag file is a sign for other system components to
feed DB with user-installed-apps, so they'd probably want to
know that DB 'was recovered' to initial state, rather than
know that 'DB used to be broken' (if the DB was broken,
and recovery to initial state is not successful, system
will not boot properly anyway).
Change-Id: Icc3b71b56c8299ba37a3acf3b8f20667af352e15
Konrad Lipinski [Thu, 23 Aug 2018 14:03:58 +0000 (16:03 +0200)]
Optimize application uninstallation
Many operations were needlessly performed. Mitigated some of those
deficiencies by constraining lifetimes of some automatic variables and
hoisting redundant operations out of the loop.
Change-Id: I19e37f1cb73ec57ecf525b7bc125d0e2e90cc573
Krzysztof Jackiewicz [Wed, 8 Aug 2018 09:27:10 +0000 (11:27 +0200)]
Simplify array size calculation
Change-Id: I8d5af79702a1b4b2e61813b99a246fbbac559320
Konrad Lipinski [Thu, 23 Aug 2018 15:08:06 +0000 (17:08 +0200)]
Prefer std::vector::emplace_back to push_back in db code
Rationale: promote efficient idioms.
Change-Id: Idc7f48c9b8a4e32a3a21de0fc234b705d51e69ec
Tomasz Swierczek [Fri, 24 Aug 2018 09:47:51 +0000 (11:47 +0200)]
Release 1.4.4
* Initialize database and restart service in policy-reload
* Give internet privilege to kernel thread(@)
* Add error logs when translating group names to gids
* Drop unused destroyAt()
* Fix: Remove all SharedRO rules after pkg uninstallation.
* Fix: launch security-manager-cleanup after /opt/usr is mounted.
* Remove fileExists() duplicates
* Add Apache 2.0 license header
* Change way of displaying performance test results
* Rework security-manager-migration script as a policy update script
* Remove unused source code
Change-Id: I8a25e757ad5f0c7d4f4596f6b1743049ac8252fb
Konrad Lipinski [Thu, 23 Aug 2018 11:57:03 +0000 (13:57 +0200)]
Initialize database and restart service in policy-reload
Added the security-manager-cmd --init-db option that replicates manager
startup database bringup semantics.
Amended security-manager-policy-reload.in to:
* stop the service before inserting into the database to avoid
concurrent modification
* call security-manager-cmd --init-db to make sure the database exists
and is coherent prior to modifying it
* perform the database transaction
* start the service so that it reads the modified database
Rationale: prior to the patch, the manager would work on stale data as
the service was already running during policy-reload invocation.
While at it, homogenized systemctl {start,stop} invocations.
Said invocations are now of the form:
systemctl {start,stop} security-manager.service security-manager.socket
Rationale:
* strive for code uniformity
* leverage systemd's automatic dependency resolution
* speed up a bit
Change-Id: I21b254345abaa617b6a389dfd060fb4a4799a148
jin-gyu.kim [Wed, 11 Jul 2018 05:32:11 +0000 (14:32 +0900)]
Give internet privilege to kernel thread(@)
In some cases, sending DNS packet is blocked by Nether.
This is due to packet has "@" label, which seems to be originated from kernel.
All packets marked as "@" need to be passed, so give the default cynara rule.
Change-Id: I4a2ba553738c8be783401ca3e71bf69b942f5496
Tomasz Swierczek [Thu, 23 Aug 2018 08:59:13 +0000 (10:59 +0200)]
Add error logs when translating group names to gids
Daemon or client failure is probably the best way to fail-early
in case of bad system config; however, system logs should have clear information
on what has failed in such case.
Change-Id: Ia119bac5795b5a38e4004b7d66c8a64f3a45ac69
Konrad Lipinski [Mon, 20 Aug 2018 09:31:29 +0000 (11:31 +0200)]
Drop unused destroyAt()
Change-Id: Ib04ce2151ab1625dab729ea098f7ccba00b3561e
Dariusz Michaluk [Tue, 17 Jul 2018 16:34:16 +0000 (18:34 +0200)]
Fix: Remove all SharedRO rules after pkg uninstallation.
Change-Id: Icf7d14507170bc98f61a7aaa3f5f37437b769bb9
Dariusz Michaluk [Tue, 3 Jul 2018 14:06:10 +0000 (16:06 +0200)]
Fix: launch security-manager-cleanup after /opt/usr is mounted.
Change-Id: I1f6f4b2a9b9712ee5ed1a1a539a3059249a90b04
Dariusz Michaluk [Thu, 16 Aug 2018 09:49:30 +0000 (11:49 +0200)]
Remove fileExists() duplicates
Change-Id: I1ec14dd6d1a60bc481dbe04ec21e70be70c8715e
Pawel Kowalski [Thu, 16 Aug 2018 09:41:20 +0000 (11:41 +0200)]
Add Apache 2.0 license header
Change-Id: I43fefb11a6998097c778d76e6d08cab211206d20
Zofia Grzelewska [Mon, 19 Feb 2018 17:51:47 +0000 (18:51 +0100)]
Change way of displaying performance test results
Performance tests didn't show enough info about test parameters.
Ratios differ greatly between test cases, it is nice to have
more infomation, as to why it might be this way.
Added displaying of initial db size and for how many apps
app defined privileges were installed.
Also changed tests names to better describe test case.
Change-Id: Icd1816ec56fd70d15d717231c0b70dc25964741e
Rafal Krypa [Mon, 30 Oct 2017 14:39:36 +0000 (15:39 +0100)]
Rework security-manager-migration script as a policy update script
This original framework was first policy migration script that appeared
in security-manager. It should be adopted by the policy update framework,
that was introduced later, but it was overlooked.
In order to merge these update infrastructures, migration directory is
removed and the original migration script is renamed and adapted as a
version 1 policy update, which was previously a no-op.
Change-Id: I96c84103d9eda0746bd8d919bc6dd42c3a50a232
Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
Dariusz Michaluk [Tue, 7 Aug 2018 11:27:58 +0000 (13:27 +0200)]
Remove unused source code
Change-Id: I40230e07b459d73907986ba916e1e15628e5d9cb
Tomasz Swierczek [Tue, 7 Aug 2018 06:43:56 +0000 (08:43 +0200)]
Release 1.4.3
* Add removal of DB broken flag before atempt to setup DB
* Add database snapshotting and recovery
* Pull db migration into manager binary at startup
* Sanitize privilege_db query storage
* Fix memleak in PrivilegeDb()
* Add /opt/usr/media to privilege-mount.list again
* Retrieve package manager privilege from User::Shell client
* Make spec compliant with gbs --incremental
* Add TZ_SYS_MEDIASHARED to privilege-mount.list
* Change log message in realPath
* Make server keep its original log tag
* Fix hybrid pkg uninstallation
Change-Id: I9b410a6c9ceed3d63a13265aad7d33e858e37c8c
Tomasz Swierczek [Tue, 7 Aug 2018 05:26:55 +0000 (07:26 +0200)]
Add removal of DB broken flag before atempt to setup DB
This way, we ensure that on next booting there will be no information
on previous problems (the flag exists to tell other system components
that user-installed applications require re-registration in security-manager).
Change-Id: I5c7a9962adeb66125664f9a6c293355136456ded
Konrad Lipinski [Fri, 20 Jul 2018 13:29:00 +0000 (15:29 +0200)]
Add database snapshotting and recovery
A snapshot of a working database can be established by running
security-manager-cmd --backup
This effectively copies "$TZ_SYS_DB/.security-manager.db" over
"$TZ_SYS_RO_SHARE/security-manager/.security-manager.db" (journal is not
being copied).
NOTE: backup does not check for concurrent access of the db file so the
user has to make sure no concurrent modification takes place in the
interim.
The manager performs an integrity check of the database at every startup
(see below). If the check fails, it truncates the database journal and
overwrites the database file with the latest snapshot, then reattempts
connection, migration and redoes the integrity check on the resulting
database.
As a first shot, integrity check uses the most aggressive possible form
achievable by sqlite pragmas by
* checking if the file exists (to prevent sqlite autovivifying it)
* checking 'pragma intergrity_check'
* checking 'pragma foreign_key_check'
TODO: for product acceptance, actual latency introduced by the integrity
check should be measured. If too high, the check can be made faster by
* dropping foreign_key_check
* replacing integrity_check with quick_check
To help make the decision, lax measurement were taken using
time sqlite3 >/dev/null /opt/dbspace/.security-manager.db 'pragma..'
time[ms] foreign_key_check integrity_check quick_check
TM1 17 20 18
emulator 5 2 2
Change-Id: I01a4ed0879b10bdcadde78ab086776420850e13c
Konrad Lipinski [Mon, 16 Jul 2018 09:28:14 +0000 (11:28 +0200)]
Pull db migration into manager binary at startup
Done at VD's request to make concurrent db access less likely. Update
scripts and the schema are no longer present at runtime. Migration is
performed in privilege_db.h instead, based on src/gen/db.h generated at
build time from db/{db.sql,updates/*}.
Change-Id: I35e09390b45b4b82a892f92f356eba6f55287268
Konrad Lipinski [Thu, 12 Jul 2018 15:28:29 +0000 (17:28 +0200)]
Sanitize privilege_db query storage
* replace PrivilegeDb::Queries map with a static array
* replace PrivilegeDb::m_commands vector with a fixed size array
* make module require C++ 14
Rationale:
* safety
* efficiency
* memory footprint
Change-Id: If69ab4525c293ae836c1d35af19b8cebf7bbff57
Konrad Lipinski [Fri, 13 Jul 2018 11:21:59 +0000 (13:21 +0200)]
Fix memleak in PrivilegeDb()
PrivilegeDb::mSqlConnection would leak if an exception was thrown during
PrivilegeDb().
Solved by:
* making PrivilegeDb::mSqlConnection a member
* making SqlConnection() noexcept
* making SqlConnection::Connect() public
Devirtualized and simplified some parts while at it.
Change-Id: I48947fd63b6ea4a72fcd86491417f83a303ec238
Rafal Krypa [Mon, 22 Jan 2018 11:54:14 +0000 (12:54 +0100)]
Remove dependency on libslp-db-util
DPL class SqlConnection had some small dependency on db-util, but this
code path was never used in security-manager.
Remove dependency to reduce memory requirements.
Change-Id: I5551f71a7f665886aa6717bb3b39f0ce8e30ffb5
Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
Radoslaw Bartosiak [Thu, 22 Sep 2016 10:23:48 +0000 (12:23 +0200)]
Cleanup: remove unused and duplicated macros
Change-Id: I2ded9109ae8b68c8879f649f0abf86eb4c0062d8
Signed-off-by: Radoslaw Bartosiak <r.bartosiak@samsung.com>
jin-gyu.kim [Wed, 1 Aug 2018 07:57:05 +0000 (16:57 +0900)]
Add /opt/usr/media to privilege-mount.list again
"/opt/usr/media" was removed in commit 23b4001.
It was wrong, because app's mount namespace is set as SLAVE after unshare().
In case of SLAVE, "/opt/usr/media" is not changed by dummy mount to TZ_USER_CONTENT.
Therefore, it should be added in the list again.
Change-Id: I504c3c8dcdac8e9b31a61dfc03c66abf09a386bc
jin-gyu.kim [Thu, 24 May 2018 08:23:07 +0000 (17:23 +0900)]
Retrieve package manager privilege from User::Shell client
When user uses dbus-send in the shell process, these privileges can be allowed.
Therefore, privilege checks for these were meaningless.
pkgcmd tools will have "System" execute label,
so we can remove these privileges from User:Shell client.
Change-Id: I56bb4c3d2ef270fada6ce8725eccb4390e2b718f
Konrad Lipinski [Fri, 6 Jul 2018 10:39:14 +0000 (12:39 +0200)]
Make spec compliant with gbs --incremental
According to [1], %prep section of the spec file should contain a single
%setup macro, nothing else. According to [2], manifest files are best
copied to %{buildroot}%{_datadir} in the %install section.
Moved manifest copy operations from %prep to %install accordingly.
As a byproduct, got a warning about an installed but unpackaged file:
security-manager-tests.manifest
Corrected the '%files -n security-manager-tests' accordingly by spelling
out the file name verbatim.
References
[1] https://source.tizen.org/documentation/reference/git-build-system/usage/gbs-build
[2] https://wiki.tizen.org/Security/Application_installation_and_Manifest
Change-Id: I29beaccfc83ae65698833696497c0f8791651ffc
jin-gyu.kim [Fri, 19 Jan 2018 07:51:10 +0000 (16:51 +0900)]
Add TZ_SYS_MEDIASHARED to privilege-mount.list
TZ_SYS_MEDIASHARED is also controlled under mediastorage priv.
Therefore, adding TZ_SYS_MEDIASHARED for default list.
By the way, "/opt/usr/media" is not needed here.
It is bount-mounted from "TZ_USER_CONTENT", can cover "/opt/usr/media" also.
Change-Id: I4a9a4688632243998a9d4ab9ace73e6743d67cde
akoszewski [Tue, 26 Jun 2018 12:43:14 +0000 (14:43 +0200)]
Change log message in realPath
Change log message in realPath function from error to warning
Change-Id: I33adac5cc32b3ac36bb521d6825c59a14926575d
Krzysztof Jackiewicz [Fri, 16 Feb 2018 15:55:03 +0000 (16:55 +0100)]
Make server keep its original log tag
Server uses Group2Gid to map group names to gids. Group2Gid calls getgrent
which uses nss which loads (but doesn't call) nss_securitymanager plugin which
loads security-manager-client which sets the log tag to SECURITY_MANAGER_CLIENT
upon loading.
Don't set log tag in client library if it has been set before.
Change-Id: I6d5469903f88c3f561c3a0737bcba0b61446b093
Tomasz Swierczek [Wed, 20 Jun 2018 12:31:59 +0000 (14:31 +0200)]
Fix hybrid pkg uninstallation
Removal of last app in pkg removed also pkg information from DB.
This meant that subsequent Cynara policy removal could not calculate
proper Smack label of the app, hence not removing policy & keeping
artifacts in Cynara DB.
Change-Id: Ib647b16f5e0d46e4f31bbaa7b823f04071e827d7
Tomasz Swierczek [Wed, 20 Jun 2018 09:10:47 +0000 (11:10 +0200)]
Release 1.4.2
* Adjust build to boost 1.65.1
* Add detection of bad sizes/lengths of deserialized containers
* Add protection against leaking memory during deserialization
Change-Id: I2d33c46a555e181628f0ba115ee353fa0843685c
Tomasz Swierczek [Tue, 19 Jun 2018 05:02:21 +0000 (07:02 +0200)]
Adjust build to boost 1.65.1
Change-Id: I51af6f76f114b8b997f1e1d1bdc5c452ac236533
Tomasz Swierczek [Thu, 14 Jun 2018 09:41:16 +0000 (11:41 +0200)]
Add detection of bad sizes/lengths of deserialized containers
Change-Id: I1b2dcf494f8ee48a39009710bb02a7222c67ee00
Tomasz Swierczek [Thu, 14 Jun 2018 08:41:26 +0000 (10:41 +0200)]
Add protection against leaking memory during deserialization
Change-Id: Ie4e2b4fed97e73368554d779f3cb83c2678dcdfc
jin-gyu.kim [Thu, 17 May 2018 04:18:17 +0000 (13:18 +0900)]
Release 1.4.1
* Refactoring/removing unnecessary branches
* Add %build in spec file
* Fix mount namespace setup in case of multiple apps in one pkg
Change-Id: I4a1e7f7d88360c3d523421e697f7c15c560bcc42
Dariusz Michaluk [Tue, 15 May 2018 16:00:01 +0000 (18:00 +0200)]
Fix mount namespace setup in case of multiple apps in one pkg
Change-Id: I1da757ba4ab40b47e9935ab1981df272ab8a4e5e
Tomasz Swierczek [Fri, 27 Apr 2018 08:54:08 +0000 (10:54 +0200)]
Add %build in spec file
Its needed to prepare debug packages in mobile environment.
Change-Id: Ic3f3fec05aa2e8f37c52f91d8398db115d8ca63c
Tomasz Swierczek [Thu, 26 Apr 2018 12:29:40 +0000 (14:29 +0200)]
Refactoring/removing unnecessary branches
Removal of unnecessary checking of old package hybrid status
& removal of not needed conditional branch in cynara.cpp
Change-Id: Ibceca51adcb94279ab9c3fce3a6521879cfeacd4
Tomasz Swierczek [Wed, 25 Apr 2018 04:37:52 +0000 (06:37 +0200)]
Release 1.4.0
* New API: app_update (allows ie. is_hybrid flag change during app upgrade)
This release changes numbering to differentiate older branches of code.
This branch will continue to use 1.4.X numbering while older versions
will contininue to use 1.3.X numbering (for bugfixes/maintenance).
Change-Id: I27231012b22de42f875f99e3b2ec9174cf97e2e9
Pawel Kowalski [Wed, 28 Mar 2018 12:01:35 +0000 (14:01 +0200)]
Allow is_hybrid flag change during app upgrade
The patch includes:
- Update of database to v13
- Split appInstall and appUninstall functions into separate
smaller functions dedicated to updates of subsequent modules:
Cynara, Privlege DB and Smack (refactoring)
- Add the appUpdate function and the API function
security_manager_app_update for updates that allow to change the
hybridity of the package
- Add modifications to allow the change of the app Smack label
(now in functions calculatePolicicies and updateAppPolicies it is
possible to give both old and new Smack labels)
Change-Id: I6e22e2750ae7982750acc9212dc14808d8ff6ecd
Yunjin Lee [Thu, 5 Apr 2018 04:25:27 +0000 (13:25 +0900)]
Release 1.3.3
* Add core privilege voicecontrol.manager, softap and softap.admin
Change-Id: I62d6a8afea6245954cec2ccadc6705f7276e5aba
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
Yunjin Lee [Wed, 4 Apr 2018 08:47:47 +0000 (17:47 +0900)]
Add core privilege voicecontrol.manager, softap and softap.admin
Change-Id: I01779a1b0c06d19c243cc54ebfb66595cf1961a9
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
Tomasz Swierczek [Wed, 4 Apr 2018 08:24:51 +0000 (10:24 +0200)]
Release 1.3.2
* Fix build error regarding to Cmake upgrade
Change-Id: I9fae9e6a3407ab92cd7621b9f97260bc2468d7f9
Taejin Woo [Fri, 16 Mar 2018 06:00:45 +0000 (15:00 +0900)]
Fix build error regarding to Cmake upgrade
Change-Id: I77f6f7822be072a7d3c44a8a5f7caf82674fdf29
Tomasz Swierczek [Wed, 28 Feb 2018 08:59:52 +0000 (09:59 +0100)]
Release 1.3.1
* Allow application to fetch its own manifest
* Add get_app_manifest_policy API
* Database Performance Test
* license-manager-agent: fix memory leak
Change-Id: Ie7112eebd88f9fd2c9a5908a81084f4ca0aab737
Zofia Grzelewska [Wed, 28 Feb 2018 16:10:19 +0000 (17:10 +0100)]
Allow application to fetch its own manifest
security_manager_get_manifest_policy didn't allow application
to fetch its own manifest in case of global application run in
unprivileged user context. This is required for PPM API to work
properly.
Change-Id: Ib5c72f2b3fdea170b1eb51e4d0ed4d7c31f293b9
Tomasz Swierczek [Mon, 12 Feb 2018 15:41:36 +0000 (16:41 +0100)]
Add full get_app_manifest_policy API implementation
Connected serviceImpl methods to IPC to provide fully functional
get_app_manifest_policy API
Change-Id: I7d94d15771330ca2352d3885698361ba8bc557a1
Tomasz Swierczek [Mon, 12 Feb 2018 15:13:23 +0000 (16:13 +0100)]
Add serviceImpl of getAppManifestPolicy function
Method to be used as implementation of security_manager_get_app_manifest_policy function
Change-Id: I897187234222d0fb17a70a20983492a91072bca7
Tomasz Swierczek [Mon, 12 Feb 2018 11:29:04 +0000 (12:29 +0100)]
API prototypes for checking app manifest policy
API needed for askuser/privacy privilege manager modules
to recognize if privilege was declared by manifest or not
Change-Id: Ica847792db05177d8afa17dde919590b6dde0636
Ernest Borowski [Fri, 11 Aug 2017 11:10:24 +0000 (13:10 +0200)]
Database Performance Test
Tests are measuring performance loss when Apps count increase
Tests are measuring: Adding app, Removing app, Adding Privileges for app
Change-Id: Ia091c67a9e36f499ada7194d6d751ffe511a981c
Signed-off-by: Ernest Borowski <e.borowski@partner.samsung.com>
Rafal Krypa [Mon, 29 Jan 2018 13:17:54 +0000 (14:17 +0100)]
license-manager-agent: fix memory leak
Data allocated by cynara_agent_get_request() must be freed with the
free() function.
Change-Id: Ifedeebfd82d06217c833145e298c36c4b3f2cc34
Rafal Krypa [Wed, 17 Jan 2018 18:38:14 +0000 (19:38 +0100)]
Release 1.3.0
* Fix MountNS::isPathBound()
* Fix NSMountLogic in case when user has no running applications
* Identify apps by Smack label instead of appName in NSMountLogic
* During application start, privileged directory enforced by bind mount may be missing
* client: do not add application process to hardcoded groups
* Add core privilege: devicecertificate
* Monitor mount/umount events on the system and update app mount namespaces
* Refactoring: make NSMountLogic class responsible for Channel and MntMonitor
* Add security_manager_cleanup_app() API
* Change license-manager package name
* Add explicit dependency on libnss-security-manager
* Fix API for freeing policy entries
* Refactor security_manager_create_namespace_internal()
* Refactor security_manager_prepare_app()
* Optimize tracking of application mount namespace
Change-Id: I2df2ed1298655a46aa23ebb9d9dbd3a4690886b7
Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
Rafal Krypa [Fri, 12 Jan 2018 12:53:33 +0000 (13:53 +0100)]
Optimize tracking of application mount namespace
Instead of bind-mounting mount namespace descriptor of application during
security_manager_prepare_app, make a symlink to it. It will make it much
faster and avoid triggering internal mount watcher that tries to update
bind mounts. It is assumed that children processes of the main application
process will never live longer than the main app process itself. This is
supposedly guaranteed by the app framework.
Change-Id: I9fcbdd670278c3884ea4a703e934065608c2fed0
Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
Dariusz Michaluk [Wed, 17 Jan 2018 11:05:07 +0000 (12:05 +0100)]
Restore mediastorage/externalstorage privilege to group mapping
Change-Id: I04206d26566f37f0b78e6e19c56c1dbb51caacfe
Dariusz Michaluk [Fri, 12 Jan 2018 11:09:32 +0000 (12:09 +0100)]
Refactor security_manager_prepare_app()
This change reduces the number of IPCs and SQL queries needed to smack label generation.
The goal is to reduce the application start time.
Change-Id: I2871a51b663b300836459b834d968f2d15cd47e0
Dariusz Michaluk [Thu, 11 Jan 2018 15:39:44 +0000 (16:39 +0100)]
Refactor security_manager_create_namespace_internal()
This change reduces the number of IPCs and SQL queries needed to setup mount namespace.
The goal is to reduce the application start time.
Change-Id: Ib6ee820f097f07add9228346cd9a191abb16a97c
Zofia Grzelewska [Mon, 4 Dec 2017 12:51:08 +0000 (13:51 +0100)]
Major Fix : Fix API for freeing policy entries
security_manager_policy_entries_free was supposed
to free table of pointers to policy_entry, but was
implemented improperly. Because function had wrong
signature (taking pointer to structure instead of
pointer of table) and without change, it causes double
free and not using proper function results in memory leak,
this function has to be changed, thus breaking the ABI.
Change-Id: I6d285c04eb1a77f5492c10d6709d0f47ebdd36f1
Rafal Krypa [Wed, 17 Jan 2018 17:35:42 +0000 (18:35 +0100)]
Add explicit dependency on libnss-security-manager
Make sure that the nss plugin gets installed to properly support
privileges enforced by gids to non-application processes.
Change-Id: I7f95503c71a2fbf18df24df7e07d8d12a4d17a3f
Signed-off-by: Rafal Krypa <r.krypa@samsung.com>