Avoid underflow on an unsigned int when computering bg overrun

A computation for when a block group overruns the end of an image
was consistently storing a negative number in an unsigned var,
and then checking for >0, which is always true for negative numbers.
So first check if the number will be positive before computing it.

Change-Id: Ic8cff8f9ab9f4ea8c5a4dc42143c2430fa87ba12
libpagemap: fix memory leak in pm_process_destroy()

procrank/librank not impacted because they end quickly. But other
programs that use libpagemap and last for long time can easily see this
memory leak.

Change-Id: I8c9e9444555bef9145c9d89850987a29f15a9b3b
Signed-off-by: Carton He <carton.he@marvell.com>
use BIONIC implementation of mmap64

Change-Id: Idb0c3d3bb98f22ea7d78043b786e931613377b02
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
procrank: Use %zu for size_t and %d for pid_t

Change-Id: Ic339a05a3091ec6b33b68bc5e76082de3513e9c7
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
procmem: Use size_t instead of int to remove a potential bug.

In procmem.c, num_maps and num_pages are declared as
int. Pointers (int*) to these variables are being
passed to functions pm_process_maps and pm_map_pagemap
respectively, both of which expect size_t * argument.

This will lead to problems in 64-bit systems where
size_t and int_t have different size.

To avoid the issue, num_maps and num_pages are declared
as size_t. In addition, loop counters i and j are now
declared as size_t to avoid comparison of signed int with
unsigned int.

Change-Id: I3fc51f9386c9b2d289d34808e19e3811ca4a3dae
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
ext4_utils: fix utility build (libmincrypt)

external/libselinux/src/android.c:702: error: undefined reference to 'SHA_hash'
collect2: error: ld returned 1 exit status
make: *** [/opt/jenkins/android/workspace/android/cm-11.0/out/target/product/galaxysmtd/obj/UTILITY_EXECUTABLES/utility_make_ext4fs_intermediates/LINKED/make_ext4fs] Error 1

Change-Id: Ie43cefffae1aae74072abc30eba5d8010619b9d8
make_ext4fs: fix block allocation to be best-fit

The block allocation algorithm was failing to allocate parts of large
files out of partially filled block groups.  Update the allocation
algorithm to be a simpler best fit loop - if the remaining length to
allocate is larger than any single contiguous region, allocate the
largest single contiguous region and continue allocating, otherwise
allocate the smallest contiguous that can hold the length.

Change-Id: Idcc60df91ed0a266d3128ea46e86408a581d3f40
Set s_flags to 2 to prevent a write on first mount.

The s_flags field is used to indicate whether characters are signed
or unsigned, which differs between ARM and x86 targets. Setting
this value to 0 causes the correct value for the target to be
written back to the superblock on first mount, even if the fs is
marked read only.

Since this value is only used to ensure interoperability with 2.4
series kernels (which we don't need) in dirhash (which we don't
use), we'll just set it to 2 to prevent the write.

Change-Id: I92698235909791fb5f423cfd61ff5299307a8f97
ext4_utils: don't leave bad image file in case of error

Bug: 13029951
Change-Id: Ibe50a503c2d3988813b362790b7fba83383fb51e