Commit graph

14020 commits

Author SHA1 Message Date
Yabin Cui
12d7f0909a adb: call run_transport_disconnects() only once.
Currently run_transport_disconnects() are called twice. One is in
handle_offline(), another is before destroying transport.
The users of disconnect callback are listener, adb_auth_client, and
remote_sockets. All of them need only to be called once. And after
handle_offline, no new listeners, adb_auth_client, or remote_sockets
can be connected to the offlined transport. So I think we can remove
the second call to run_transport_disconnects().

Change-Id: I1ef8b6b7b5ab7ae1bad109be107c85973d65a2e3
2015-08-28 11:39:37 -07:00
Spencer Low
d8cce1817b adb: fix adb install and adb push exit code, error handling, unittest
adb push was not returning a bad exit code when write_data_file() or
write_data_link() failed. I encountered this when running the unittest
on Windows which can get into situations where stat() succeeds, but
open() fails due to pre-existing exclusive file access (which typically
doesn't exist on unix).

The same code is used by adb install, so this also fixes its error
handling.

Fixed some fd leaks and propagation of errors when reading a file.

Fixed a unittest to close temp files before reading them.

Change-Id: Ieba0026fa4c79eb0484676e4f2faaac9603ef584
Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-08-28 11:38:28 -07:00
Nick Kralevich
2c58af5223 Merge "VectorImpl.cpp: fix benign multiplication overflow" 2015-08-28 16:54:02 +00:00
Nick Kralevich
c76698f24e VectorImpl.cpp: fix benign multiplication overflow
j is a ssize_t, which can go negative. If it goes negative,
the resulting multiplication of mItemSize*j doesn't make
any sense. Since the value is never used, just don't perform
the calculation if j < 0.

Bug: 23607865
Change-Id: I14f6f6506645d582f7d67a2e2d60ead3cb18b957
2015-08-28 06:40:23 -07:00
Spencer Low
de4505f819 adb unittest: get test_unicode_paths passing on win32
The Python 2 subprocess class doesn't use Unicode, so as a work-around
write the command line to a UTF-8 batch file and run that.

I modified the test to use u'blah' without .encode('utf-8') because the
Python docs recommend dealing with string variables like that. When
formatting a string with a unicode parameter, use u'foo' on the constant
string to make it unicode.

I also tested this on Linux and it seems to work fine (I did ls in the
middle of the test to make sure the filenames came out right, etc.).

I had to close the temporary files before adb tries to read/write them
because filesystem semantics are different on Windows (technically I
might be able to modify adb to try to open files with more permissive
share flags, but then I'm not sure if Python uses the right share flags.
Basically, I'd be opening another can of worms.).

Fixed the test to delete a temp file on the device once it is done.

Change-Id: Id0c34e26d7697fbbb47a44ae45298bed5e8c59d6
Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-08-28 01:20:03 -07:00
Yabin Cui
fd28f327ee adb: remove adisconnect in aremotesocket.
The function of remote_socket_disconnect() is to make sure
the local_sockets and remote_sockets are closed when the binded
transport is disconnected. However, as we call close_all_sockets()
in handle_offline(), we don't need remote_socket_disconnect() any more.

Change-Id: I575f632d9f8703149f34e0210eb698a56e2516a9
2015-08-27 19:35:47 -07:00
Nick Kralevich
f4355868cb Merge "android_memset.c: Use sanitized shifts" 2015-08-27 23:17:22 +00:00
Yabin Cui
4f8d5b0128 Merge "adb: disconnect: fix write-after-free memory corruption and crash." 2015-08-27 22:58:03 +00:00
Yabin Cui
f4b9928563 adb: disconnect: fix write-after-free memory corruption and crash.
Transport atransport objects are semi-reference counted: the input and
output threads each hold a reference. The adb disconnect command was
calling transport_unref to release a reference that it never had in the
first place. This meant that the refcount dropped to zero and the object
was deleted before either the input or output thread released its
reference. When that last thread released its reference, it wrote to
freed memory and also sometimes crashed.

This fix is to not release any unheld reference, instead it just kicks
the transport to break remote_read in output_thread. So all transport
close flow goes the following way:
output_thread (exit) -> main thread (offline the transport) ->
input thread (exit) -> main thread (destroy the transport)

Change-Id: Iad1fe718acc8716f3a79c8c22b426a1b2450452c
2015-08-27 14:41:07 -07:00
Duane Sand
c348a88376 android_memset.c: Use sanitized shifts
Avoid checks and traps on msb=1 unsigned shifts.

Change-Id: I5203a4290296b5557c0420ce0debad3b60d48233
2015-08-27 14:32:17 -07:00
Nick Kralevich
e6d3cf3937 Merge "android_memset.c: Use __attribute__((no_sanitize("integer")))" 2015-08-27 20:36:08 +00:00
Nick Kralevich
d9eda62875 android_memset.c: Use __attribute__((no_sanitize("integer")))
Turn off integer sanitization on android_memset. memset()ing is
expected to be a fast operation.

Avoid the use of the "while (size--) { }" construct, which harmlessly
underflows.

Change-Id: Ia61ff2323c759bf52df7e70b8be2fae0b0366dda
2015-08-27 13:14:36 -07:00
Yabin Cui
f306812303 Merge "adb: fix a fake data race on transport:kick reported by tsan." 2015-08-27 18:25:02 +00:00
Bertrand Simonnet
c3f866f60c Merge "metricsd: Use system properties to store build time metadata." 2015-08-27 17:58:23 +00:00
Nick Kralevich
d34f419826 Merge "strdup16to8.c: fix benign integer underflow." 2015-08-27 17:54:32 +00:00
Nick Kralevich
2b98a9eec0 strdup16to8.c: fix benign integer underflow.
A size_t value is not allowed to go below zero.

Change-Id: Ic888c6605d911e0b5dbee1a2fe1daf41e616e106
2015-08-27 10:30:50 -07:00
William Luh
001c87c3cd Merge "Add macro to call event logger for errors." 2015-08-27 16:22:02 +00:00
Mark Salyzyn
96ac40afbf Merge "logd: klogd and Mediatek" 2015-08-27 14:15:42 +00:00
Spencer Low
2122c7a148 win32: adb start-server shows stdout/stderr output from actual server
When launching the adb server (typically from adb start-server),
redirect stdout/stderr to anonymous pipes which are read by threads in
the parent process, to make error diagnosis easier.

If there is an error during adb start-server, the output looks like:

> adb start-server
* daemon not running. starting it now on port 5037 *
error: could not blah                 # from server process
could not read ok from ADB Server     # from launch_server
* failed to start daemon *            # from adb_connect
error: cannot connect to daemon       # from adb_commandline

Fix handle-leaks in launch_server by using new unique_handle class
that is based on std::unique_ptr.

In the server, close stdin and redirect to adb.log *before* sending the
ACK, so that any errors are reported early instead of after the ACK.

Change-Id: I943881210a0ea9458fc36851339f916c3d6a0830
Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-08-26 18:46:09 -07:00
William Luh
964428c0a6 Add macro to call event logger for errors.
Bug:23180694
Change-Id: I566a290334345f48013029534efef3e08e726e40
2015-08-26 15:59:06 -07:00
Yabin Cui
d8459b3d3c adb: fix a fake data race on transport:kick reported by tsan.
It is reported by tsan as a double checked locking. But I think
it is not a real data race. Because I think the old code is able
to make sure t->kick() is only called once, and the caller of
kick_transport is not relying on the side-effect of calling
t->kick().
But as it is not perf critical, I don't mind breaking the double
checked locking pattern.

Bug: 23385662
Change-Id: Ie3597dd56bb514117c3865d2afcfd7c115731a78
2015-08-26 15:22:56 -07:00
Yabin Cui
804180b2cc Merge "adb: fix a data race in local_socket_event_func." 2015-08-26 22:11:26 +00:00
Yabin Cui
0067412421 adb: fix a data race in local_socket_event_func.
If s->peer->enqueue() failed, s may be freed. So we should use
saved_xxx instead of s->xxx before verifying the return value.

Change-Id: I6c072406dceb98e2d02798d0dcdc428fa99e66fb
2015-08-26 15:06:43 -07:00
Mark Salyzyn
46d159d462 logd: klogd and Mediatek
- sniff for PID in kernel log messages if available
- properly deal with klogd watermark in face of modified output
- deal more stringently with priority tag, must have [ following
- suppress process-name stutter in tag that can happen
- do not use : to demark tag if within [ ]

Mediatek-special change that adds <printk_state>(<cpu>)[<pid>:<comm>]
as a prefix to the printk messages. Along the lines of (simplified
for entertainment purposes, YMMV):

    char tbuf[50]; /* printk prefix */
    int this_cpu = smp_processor_id();
    char state = __raw_get_cpu_var(printk_state);
    unsigned tlen = snprintf(tbuf, sizeof(tbuf), "%c(%x)[%d:%s]",
               state, this_cpu, current->pid, current->comm);

Bug: 23517551
Change-Id: I568e25c5aa6d8474835454a0e83b19c2921b7985
2015-08-26 14:57:16 -07:00
Yabin Cui
fbdd5ee2f6 Merge "adb: keep all asocket operations in the main thread." 2015-08-26 19:40:54 +00:00
Nick Kralevich
53f11b620d Merge "libcutils: enable LOCAL_SANITIZE := integer" 2015-08-26 18:35:11 +00:00
Nick Kralevich
fc82dd9179 libcutils: enable LOCAL_SANITIZE := integer
Call abort() on undefined or sketchy integer behavior.
Protects against integer overflow attacks.

Tested on Nexus 5 and Nexus 9 with no obvious problems.

Change-Id: I6cb28b4a0f5feed69ea472dfac8804fb0bf99719
2015-08-26 11:32:31 -07:00
Nick Kralevich
532e6cde99 Merge "libcutils: cleanups for -fsanitize=integer" 2015-08-26 18:30:59 +00:00
Yabin Cui
34f45c5663 adb: keep all asocket operations in the main thread.
As far as I can see, all asockets operations happen in fdevent_loop()
in the main thread, excepting close_all_sockets(). Instead of adding
lock and ref_count for each asocket, a simpler way would be moving
close_all_sockets() from input_thread to the main thread.

In input_thread(), there are two path to break the loop and call
close_all_sockets(). One path is when receiving offline A_SYNC, which
is sent by the main thread. The other path is when read_packet
fails, which I believe is almost not possible and doesn't matter
(Because t->fd is closed just before t is freed.). So I move
close_all_sockets() to handle_offline() in the main thread.

the socket_list_lock in sockets.cpp could be removed. But I prefer
to leave it for the following changes.

Bug: 6558362
Change-Id: I5da23f60a67a331262c62693b9b127fe2689c799
2015-08-26 11:27:43 -07:00
Mark Salyzyn
6439378922 Merge "logd: worst uid record watermark part deux" 2015-08-26 17:49:53 +00:00
Nick Kralevich
7390478f19 libcutils: cleanups for -fsanitize=integer
Hash functions rely on overflow behavior, so whitelist them.

ATRACE_TAG_NOT_READY: use an unsigned constant when shifting bits.
Otherwise, the value overflows on shift. The users of this constant
assign it to a uint64_t variable.

Change-Id: I21c437ce2083525e906c3ead3259ec34a1ef4b66
2015-08-26 10:40:00 -07:00
Elliott Hughes
0ac29519ac Merge "Don't build 32-bit host libadb." 2015-08-26 02:38:51 +00:00
Elliott Hughes
daa6c463a9 Don't build 32-bit host libadb.
Change-Id: Ib6ad3db2dc160273d20fa14e0820f29ed649d75a
2015-08-25 19:38:14 -07:00
Elliott Hughes
e2cda95341 Merge "Fix missing <stdarg.h>." 2015-08-26 02:34:52 +00:00
Elliott Hughes
3ab8b859c2 Fix missing <stdarg.h>.
system/core/fastboot/engine.cpp:84:5: error: use of undeclared identifier 'va_start'

Change-Id: I8aff9a40d33f403c0d0d91a15638863fe24dca2e
2015-08-25 19:34:13 -07:00
Elliott Hughes
04b94b2571 Merge "Use 64-bit file sizes in fastboot." 2015-08-26 02:12:50 +00:00
Elliott Hughes
fc79767fc2 Use 64-bit file sizes in fastboot.
Bug: 20110580
Change-Id: I5d3718103ff581ff3b5241c8b0e52b585b4f37e5
2015-08-25 19:11:52 -07:00
Elliott Hughes
a421c1e5bc Merge "Possible Mac build fix." 2015-08-26 00:54:10 +00:00
Elliott Hughes
62077d32a2 Possible Mac build fix.
The error was this:

  system/core/adb/usb_osx.cpp:203:74: error: values of type 'UInt32' should not
  be used as format arguments; add an explicit cast to 'unsigned int' instead
  [-Werror,-Wformat]
    snprintf(devpathBuf, sizeof(devpathBuf), "usb:%" PRIu32 "X", locationId);
                                                  ~~~            ^~~~~~~~~~
                                                                 (unsigned int)

Which seems to be because on LP64 UInt32 is "unsigned int" but on LP32 it was
"unsigned long". We don't have to care about LP32, so -- if we can -- we're
probably better off just using uint32_t instead of UInt32.

Change-Id: I576f76cf2016ee59caccbc317ef74b6e8d71d722
2015-08-25 17:48:12 -07:00
Elliott Hughes
626433024d Merge "Not all filesystems support setting SELinux labels." 2015-08-26 00:18:44 +00:00
Ruchi Kandoi
565e4c6a43 Merge "healthd: Adds cycle_count, current_now and full_charge properties." 2015-08-25 23:45:42 +00:00
Elliott Hughes
383444085a Not all filesystems support setting SELinux labels.
Bug: http://b/23530370
Change-Id: Ie4deb3544304754696f049d17b12168cad4a51fd
2015-08-25 16:33:50 -07:00
Bertrand SIMONNET
2699362a57 metricsd: Use system properties to store build time metadata.
Instead of using /etc/lsb-release to store the version, channel and
build_target_id, use the Android system properties.

BUG: 22879642

Change-Id: Ic79e74bd14bf8e2c55549c08963a66700b49b544
2015-08-25 16:23:04 -07:00
Steve Fung
c3d61786f0 Merge "crash_reporter: Run with supplemental groups" 2015-08-25 22:56:56 +00:00
Elliott Hughes
43f43d8792 Merge "Move adb's selinux_android_restorecon up and check for failures." 2015-08-25 20:26:59 +00:00
Elliott Hughes
0adc09721f Move adb's selinux_android_restorecon up and check for failures.
Change-Id: Ib3ff282cf52df03f3b9a0abecf0abda99d7df641
2015-08-25 13:14:07 -07:00
Elliott Hughes
e8e272c525 Merge "EINTR is handled by adb_read/unix_read and friends." 2015-08-25 19:51:01 +00:00
Elliott Hughes
a0f02fa9e3 Merge "Fix the fs_config call." 2015-08-25 18:11:06 +00:00
Elliott Hughes
7baecbe6a3 Fix the fs_config call.
fs_config ORs in bits to the existing mode value.

Change-Id: I23f0655f9c4c8c8dc43ed979f3b519d7c03a11f8
2015-08-25 11:09:04 -07:00
Elliott Hughes
61ab1618a8 Merge "Fix 32-bit build." 2015-08-25 18:06:19 +00:00