Commit Graph

50 Commits

Author SHA1 Message Date
Jean-Philippe Andre 05c051405e eina file: Ensure populate is safe to call
This makes sure that the call to madvise is safe. On Linux it's not too
much of an issue as checks are made inside madvise, and the worst that
can happen is an error is returned (EINVAL). Not great.

But if MAP_POPULATE is not present, as is the case on *BSD, then the
internal function _eina_file_map_populate() is used for the populate
rule. In that case actual data is read and we should make sure not to
trigger a segfault or bus error.

Also, this makes sure that in case of HugeTLB we actually populate all
pages, rather than one page out of 8 (we were jumping by 16Mb instead of
2Mb).

Note: Can we get the size of a HugeTLB at runtime? We're assuming 2Mb
which might very well not be the case!
See: https://wiki.debian.org/Hugepages

Tested by disabling MAP_POPULATE and observing crashes :)

@fix
2017-09-18 11:58:53 +09:00
Jean-Philippe Andre b2ea60691e eina file: Fix map_populate on the global map
If eina_file_map_all() is called, the map isn't added to the internal
hash "rmap" and so _eina_file_map_rule_apply() would never be called.

@fix

asa
2017-09-18 11:58:53 +09:00
Carsten Haitzler a5c8e883d8 eina mmap safety - only map zeropages if it's an eina file that sigbuses
restrict mapping /dev/zero to only eina files having a sigbus
reported. the mmap was before all our file access used eina_file i
think thus the raw mmap of it. now walk all eina files and find the
candidate and only then if it exists flag is as having a faulty i/o
backing and map the zerto pages then return, otherwise call abort.
more restricted mapping and perhaps a fix for not trapping non-efl
issues.

@fix
2017-08-30 12:03:41 +09:00
Guilherme Iscaro 48443fda8f Eina_File: Avoid using munmap() on file->global_map.
When a virtualized file is created the file->global_map will not
point to a mmapped region, thus it's not safe to use munmap() during
the file cleanup. Only use munmap() if the file is backed by a FD.

Fixes: T5234.
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2017-08-02 16:03:20 -07:00
Al Poole 9aeaef55c4 eina_file: fix unmap of unmapped region when Eina_File has copied data and not a map;
Summary:
This was causing problems on non-Linux architectures as eina_file_real_close unmapped not mapped data. Added a "copied" flag to Eina_File which is set on eina_file_virtualize (on copied data), and tested for when eina_file_real_close does the unmap. I'm surprised Linux allowed this. Certainly all of the BSDs crashed with the previous behaviour.

@fix T5479

Test Plan: Example inlcude Rage and Enlightenment Thumb on BSD systems which use eina_file_virtualize with emotion to obtain album artwork.

Reviewers: raster, cedric, jpeg

Reviewed By: jpeg

Maniphest Tasks: T5479

Differential Revision: https://phab.enlightenment.org/D5006
2017-07-07 13:22:53 +09:00
Cedric BAIL b2893dfc77 eina: use new API eina_file_close_on_exec. 2017-04-18 16:54:03 -07:00
Ivan Furs 808fcf4dae eina_file: add eina_file_unlink
Test Plan: split  D4423 - unlink

Reviewers: raster, vtorri, an.kroitor, jpeg, reutskiy.v.v, NikaWhite, cedric

Reviewed By: cedric

Subscribers: artem.popov, cedric, vtorri, jpeg

Tags: #windows, #efl

Differential Revision: https://phab.enlightenment.org/D4485

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2017-02-07 15:14:54 -08:00
Carsten Haitzler 58d3328d80 eina - eina file map populate fallback to use log int not int... for size
this makes the size match other sizes in eina_file. doesn't affect
linux but i think bsd's get hit.
2016-09-20 21:57:47 +09:00
Cedric BAIL 25aef34aa0 eina: populate memory in the right limit. 2016-09-19 14:02:43 -07:00
Cedric BAIL 0ef07d6095 eina: readdir_r has been deprecated.
So glibc has decided that readdir_r is hard to use safely and deprecated it
this summer. They recommand to use readdir, which was in the past unsafe to
use in a multi thread scenario, but is now on most system (and all system
we care, including our own implementation in evil). It is basically safe
as long the same DIRP is not accessed from another thread. This is true in
our code base, so we are fine to go with this.

For further reading: https://lwn.net/Articles/696474/
2016-08-25 15:23:14 -07:00
Cedric BAIL 72aca66f8d eina: win32 and linux version code are the same. Sharing code is better. 2014-07-14 15:46:54 +02:00
Vincent Torri ea8b4c82ed eina: call the function, then return 2014-07-13 15:17:34 +02:00
Guillaume Friloux 619987bc2e Remove warning by adding eina_cpu.h which expose eina_cpu_page_size() 2014-05-30 10:25:05 +02:00
Cedric Bail f5f9e44219 eina: reduce log to warning when not found. 2014-02-22 16:37:15 +09:00
Cedric BAIL 58f424a199 eina: add more debug information when failing to open a file. 2014-02-21 17:13:09 +09:00
Cedric Bail 62b469749a eina: fix the crash seen by some during rebuild.
Before this patch, we were unconditionnaly destroying the Eina_File if that one
did change on disk. We also make sure that we remove the right entry from the cache
if the file did change there.
2013-11-21 14:49:08 +09:00
Cedric Bail 0cfb40b7fb eina: cleanup file destruction and reintroduce EINA_MAGIC use. 2013-11-20 20:08:44 +09:00
Jérémy Zurcher 8a3e021298 Revert "eina: fix a possible race condition during eina_file_close."
it breaks everything

This reverts commit 7e8fb93206.
2013-11-20 10:22:00 +01:00
Cedric Bail 7e8fb93206 eina: fix a possible race condition during eina_file_close.
The lock on the main hash was taken to late (after we took the decision
to remove the targeted Eina_File from the cache), this means it was possible
to get an Eina_File from the cache that was going to be removed. This patch
attempt to fix that potential race condition.

Hopefully should fix T461.
2013-11-20 13:02:37 +09:00
Cedric BAIL da559ee5d0 eina: use portable infrastructure to detect page size. 2013-11-10 09:26:12 +01:00
Cedric Bail 570ce667f3 eina: fix API as we don't and never will touch memory for write in that function. 2013-10-28 18:32:40 +09:00
Cedric Bail caf934e005 eina: don't try close dummy handle. 2013-09-02 12:33:21 +09:00
Jean-Philippe Andre deacfdce24 eina: Fix invalid check on Eina_File::global_map
global_map is set to MAP_FAILED in case of error after mmap.
So, it is initialized to MAP_FAILED and considered valid
otherwise.

So, we don't want to set the map to NULL or even check again NULL.
2013-08-27 17:31:12 +09:00
Carsten Haitzler bdb19cd974 eina-file - adapt to bsd version of MADV_REMOVE 2013-08-06 16:13:03 +09:00
Cedric Bail 4dd259f3b1 eina: add eina_file_refresh(). 2013-07-31 17:16:40 +09:00
Cedric Bail f2de8970a1 eina: add support for in memory only Eina_File. 2013-07-31 11:51:51 +09:00
Carsten Haitzler d15d86e26f eina: add eina_file_map_populate() 2013-07-06 22:01:23 +09:00
Cedric Bail 674f612c3b eina: more meaningful message. 2013-05-08 18:17:00 +09:00
Cedric BAIL 6b4ba5cead eina: a little bit sleepy, put that in the right file. 2013-03-15 16:47:05 +09:00
Cedric BAIL 352ed3cfa4 eina: add evil in. 2013-03-15 16:41:46 +09:00
Cedric BAIL 0dde9a6574 eina: share eina_file_copy code accross platform. 2013-03-15 16:05:39 +09:00
Cedric BAIL e70502f1a1 eina: improve portability of Eina_File. 2013-03-15 11:05:25 +09:00
Daniel Willmann f90726cf35 Revert "eina: improve portability of Eina_File."
This reverts commit c002d113f1.

This commit reliably breaks builds with clang. Please test with
export CC=clang before you commit again.

export CC=clang
./autogen.sh --enable-multisense && make -j 10

The error Jenkins gets (I confirmed locally):

/bin/bash: line 1: 13549 Segmentation fault      (core dumped) EFL_RUN_IN_TREE=1 ./bin/edje/edje_cc -id . -fd . -id ./tests/emotion/data tests/emotion/data/theme.edc tests/emotion/data/theme.edj
2013-03-14 17:21:48 +00:00
Cedric BAIL c002d113f1 eina: improve portability of Eina_File. 2013-03-14 20:52:37 +09:00
Cedric Bail 709b975ca3 check fchmod existence for portabilityy 2013-03-13 17:04:32 +09:00
Cedric Bail 8d5e33077e efl: use HAVE_FCNTL around call to fcntl. 2013-03-10 23:10:27 +09:00
Cedric BAIL 1cb8c3c006 efl/eina: fix map leak in Eina_File.
SVN revision: 83668
2013-02-06 09:28:00 +00:00
Gustavo Sverzut Barbieri e21bfbbbb2 eina: add missing ifdef around splice code.
SVN revision: 82735
2013-01-14 00:00:37 +00:00
Gustavo Sverzut Barbieri 0a2d116119 efl: eina_alloca.h to simplify alloca() usage.
having to replicate 18 lines per file just to access alloca() is
insane. Let's do that in Eina.h and avoid that crap :-/



SVN revision: 82082
2013-01-03 15:10:34 +00:00
Gustavo Sverzut Barbieri 43eb232d38 oops: remove printf
SVN revision: 81943
2012-12-31 23:42:25 +00:00
Gustavo Sverzut Barbieri 6ae6f925a4 efl: add eina_file_copy()
it's useful to copy file from one place to another and this will be
used in eio' s implementation.

NOTE: did not use mmap here as mmap faults may be cumbersome to handle
(Eina_File itself does that, but in a nasty way) and the
implementation would be severely different as there is no Eina_File
from FD, and there is no way to inject custom memory/fd into the
Eina_File's fault handling. The performance would not be that
different anyways and the splice() is already in there for systems
with good performance (read: Linux).



SVN revision: 81942
2012-12-31 23:17:18 +00:00
Gustavo Sverzut Barbieri 81bd007e5b efl: share HAVE_ATFILE_SOURCE between eina_file, ecore_file...
SVN revision: 80391
2012-12-06 21:15:30 +00:00
Jérémy Zurcher 9aa23128b6 [eina] path sanitizing now takes care of '/./' and
breaks loop on '/..$'



Patch by: Jérémy Zurcher <jeremy@asynk.ch>



SVN revision: 79449
2012-11-19 13:13:31 +00:00
Vincent Torri 650d3d723c Eina: Fix build on Solaris 10
Patch by Robert David


SVN revision: 79085
2012-11-10 08:35:11 +00:00
Vincent Torri 0b211e0c20 eina: formatting
SVN revision: 78756
2012-11-01 12:36:20 +00:00
Sebastian Dransfeld 35d28817db eina: Always do opendir first
SVN revision: 78238
2012-10-19 09:03:14 +00:00
Carsten Haitzler 786544b73d fix dirp leak
SVN revision: 78235
2012-10-19 08:18:59 +00:00
Sebastian Dransfeld b6add7a518 eina: Check if we can open dir first
SVN revision: 78172
2012-10-18 09:12:14 +00:00
Vincent Torri 7fe3d35994 merge: __UNUSED__ --> EINA_UNUSED and some fixes in eo.
SVN revision: 77542
2012-10-05 20:09:47 +00:00
Vincent Torri 785f2a6b3a merge : add eina
currently, examples, tests and benchmark are not set. That's the next things i'll do


SVN revision: 76710
2012-09-16 10:57:48 +00:00