Commit Graph

630 Commits

Author SHA1 Message Date
Giacinto Cifelli 6fc119d9ea gatchat: support for auth NONE
Added authentication method G_AT_PPP_AUTH_METHOD_NONE and its handling.
2018-10-03 11:44:03 -05:00
Marcel Holtmann 4cd1608320 gatchat: Use pragma to mask unknown pragma diagnostic options
gatchat/gatmux.c:33:32: error: unknown option after ‘#pragma GCC diagnostic’ kind [-Werror=pragmas]
 #pragma GCC diagnostic ignored "-Wcast-function-type"
                                ^~~~~~~~~~~~~~~~~~~~~~
2018-06-14 21:47:41 +02:00
Marcel Holtmann 07fc4a8506 gatchat: Use pragma to mask GFunc casting warning
gatchat/gatmux.c: In function ‘watch_dispatch’:
gatchat/gatmux.c:454:17: error: cast between incompatible function types from ‘GSourceFunc’ {aka ‘int (*)(void *)’} to ‘gboolean (*)(GIOChannel *, GIOCondition,  void *)’ {aka ‘int (*)(struct _GIOChannel *, enum <anonymous>,  void *)’} [-Werror=cast-function-type]
  GIOFunc func = (GIOFunc) callback;
                 ^
2018-06-14 15:19:16 +02:00
Slava Monich 43c2bfdc52 gatchat: Removed unused GAtPPP field 2017-10-26 15:24:36 -05:00
Slava Monich bf5f4242a2 gatmux: Remove write watch source at shutdown
Otherwise write_watcher_destroy_notify can be invoked after
GAtMux has been deallocated which results in write after free:

==3952== Invalid write of size 4
==3952==    at 0xABF54: write_watcher_destroy_notify (gatmux.c:285)
==3952==    by 0x4AF21E7: g_source_callback_unref (gmain.c:1561)
==3952==    by 0x4AF2E53: g_source_destroy_internal.constprop.8 (gmain.c:1207)
==3952==    by 0x4AF61CF: g_main_dispatch (gmain.c:3177)
==3952==    by 0x4AF61CF: g_main_context_dispatch (gmain.c:3769)
==3952==    by 0x4AF658F: g_main_loop_run (gmain.c:4034)
==3952==    by 0xBDDBB: main (main.c:261)
==3952==  Address 0x50c6cb0 is 8 bytes inside a block of size 4,396 free'd
==3952==    at 0x4840B28: free (vg_replace_malloc.c:530)
==3952==    by 0xACB53: g_at_mux_unref (gatmux.c:642)
==3952==  Block was alloc'd at
==3952==    at 0x4841BF0: calloc (vg_replace_malloc.c:711)
==3952==    by 0xAC9DF: g_at_mux_new (gatmux.c:603)
==3952==    by 0xADF2F: g_at_mux_new_gsm0710_basic (gatmux.c:1160)
2017-10-23 17:22:56 -05:00
Slava Monich bb637a12c5 gatmux: Remove finalized watches from the list
Leaving them there may result in invalid reads like this:

==2312== Invalid read of size 4
==2312==    at 0xAB8C0: dispatch_sources (gatmux.c:134)
==2312==    by 0xAC5D3: channel_close (gatmux.c:479)
==2312==    by 0x4AE8885: g_io_channel_shutdown (giochannel.c:523)
==2312==    by 0x4AE8A1D: g_io_channel_unref (giochannel.c:240)
==2312==    by 0xAC423: watch_finalize (gatmux.c:426)
==2312==    by 0x4AF2CC9: g_source_unref_internal (gmain.c:2048)
==2312==    by 0x4AF44E1: g_source_destroy_internal (gmain.c:1230)
==2312==    by 0x4AF44E1: g_source_destroy (gmain.c:1256)
==2312==    by 0x4AF5257: g_source_remove (gmain.c:2282)
==2312==    by 0xAB5CB: io_shutdown (gatio.c:325)
==2312==    by 0xAB667: g_at_io_unref (gatio.c:345)
==2312==    by 0xA72C7: at_chat_unref (gatchat.c:972)
==2312==    by 0xA829B: g_at_chat_unref (gatchat.c:1446)
==2312==  Address 0x51420f0 is 56 bytes inside a block of size 60 free'd
==2312==    at 0x4840B28: free (vg_replace_malloc.c:530)
==2312==    by 0x4AF2D33: g_source_unref_internal (gmain.c:2075)
==2312==    by 0x4AF44E1: g_source_destroy_internal (gmain.c:1230)
==2312==    by 0x4AF44E1: g_source_destroy (gmain.c:1256)
==2312==    by 0x4AF5257: g_source_remove (gmain.c:2282)
==2312==    by 0xAB46B: g_at_io_set_write_handler (gatio.c:283)
==2312==    by 0xA713F: at_chat_suspend (gatchat.c:938)
==2312==    by 0xA72B7: at_chat_unref (gatchat.c:971)
==2312==    by 0xA829B: g_at_chat_unref (gatchat.c:1446)
==2312==  Block was alloc'd at
==2312==    at 0x4841BF0: calloc (vg_replace_malloc.c:711)
==2312==    by 0x4AFB117: g_malloc0 (gmem.c:124)
==2312==    by 0x4AF401F: g_source_new (gmain.c:892)
==2312==    by 0xAC6A7: channel_create_watch (gatmux.c:506)
==2312==    by 0x4AE7C4F: g_io_add_watch_full (giochannel.c:649)
==2312==    by 0xAB4EB: g_at_io_set_write_handler (gatio.c:297)
==2312==    by 0xA7103: chat_wakeup_writer (gatchat.c:931)
==2312==    by 0xA753F: at_chat_send_common (gatchat.c:1045)
==2312==    by 0xA850F: g_at_chat_send (gatchat.c:1502)

It's also necessary to add additional references to the sources
for the duration of the dispatch_sources loop because any source
can be removed when any callback is invoked (and not necessarily
the one being dispatched).
2017-10-23 15:25:20 -05:00
Marcel Holtmann 3472aa67a6 gatchat: Reword the fall through cases to avoid compiler warnings 2017-07-11 10:44:15 -07:00
Kuba Pawlak 5a6fe84ec0 gatchat: Fix parsing fields with odd number of quotation marks
Events like +CLCC and +CCWA can have contact name attached to the
end of line. If this field contains odd number of quotation marks,
parser will eventually reject such message as malformatted.
2016-11-10 10:18:26 -06:00
Denis Kenzior a8d4e7960f gatchat: Fix style 2016-10-05 13:02:52 -05:00
Antoine Aubert da47398525 gatmux: fix read channel remove on error
In case of invalid IO, read_watch is not reset. This fix crash on
destroy gatmux.
2016-10-05 13:02:41 -05:00
John Ernberg a34bf08359 gatchat: Use g_slist_free_full 2016-04-22 15:23:22 -05:00
Denis Kenzior abb72e8999 gatchat: Add support for shutting down the server
By sending SIGUSR1 we can initiate a soft server-shutdown.
2016-01-11 15:32:54 -06:00
Denis Kenzior ca105f7040 ppp_net: Make static analysis tools happy
The kernel simply puts a null terminator at index 15 prior to ifr_name
processing.  So we do the same.

Original report by:
Sabas Rosales, Blanca E <blanca.e.sabas.rosales@intel.com>

 Buffer not null terminated (BUFFER_SIZE_WARNING) buffer_size_warning:
 Calling strncpy with a maximum size argument of 16 bytes on destination
 array ifr.ifr_ifrn.ifrn_name of size 16 bytes might leave the
 destination string unterminated.

  67        strncpy(ifr.ifr_name, net->if_name, sizeof(ifr.ifr_name));
2015-07-28 10:16:16 -05:00
Marcel Holtmann b2b67fa74e gatchat: Fix compiler warning with logical expression
CC       gatchat/gatchat.o
gatchat/gatchat.c: In function ‘have_line’:
gatchat/gatchat.c:586:28: error: logical not is only applied to the left hand side of comparison [-Werror=logical-not-parentheses]
  if (!strncmp(str, "AT", 2) == TRUE)
                            ^
2015-07-07 11:35:54 +02:00
Sergey Alirzaev 4a937b96aa build: make ofono build against musl
ifdef away GNU libc extensions and use a POSIXly correct pointer type
2015-07-01 08:09:53 -05:00
Denis Kenzior bce5d9579c gatchat: Introduce g_at_chat_get_userdata 2015-05-13 09:57:52 -05:00
Denis Kenzior 8edaaaf210 gatchat: Fix up minor coding style issues 2014-06-21 11:54:26 -05:00
Philip Paeps a88662d23c gatchat: implement PAP authentication
Make the authentication method configurable, CHAP or PAP, defaulting to
CHAP (i.e.: previous behaviour).

Implementation details:

 o If PAP is configured, we NAK the CHAP authentication protocol option
   in LCP configuration requests and suggest PAP instead.  This works
   around the amusing requirement of 3GPP TS 29.061 that modems must
   send a forced positive acknowledgement of the authentication method
   tried (i.e.: the modem will successfully accept any CHAP handshake,
   but if the network only supports PAP, the modem will hang up
   when it tries and fails to activate the PDP context)

 o The PAP Authenticate-Request is resent a hard-coded three times at
   ten-second intervals.  This may be a bit too persistent.  Chances
   are if it doesn't work the first time, it'll never work, but the
   RFC insists that we MUST retry.
2014-06-21 11:50:34 -05:00
Marcel Holtmann f83233d295 gatchat: Fix handling of WRITE_SCHEDULER_DEBUG 2014-01-19 16:48:04 -08:00
Daniel Wagner ef7a4bc3a7 gatchat: Print error message if opening tun failes
This is a very common mistake. Let's help the users to
configure their system correctly.
2012-08-30 17:06:09 -05:00
Marcel Holtmann c49c3314d1 gatchat: Avoid shadowing global AT server variable 2012-07-15 20:14:12 -03:00
Marcel Holtmann 17828ce9c9 gatchat: Avoid shadowing variables 2012-07-15 20:14:12 -03:00
Guillaume Zajac 2bf8bb9d45 gatserver: Add NULL check to avoid crash
Dundee is not waiting to receive the NO CARRIER notification
to close the IO channel with oFono so that oFono is trying to
send a NO CARRIER although GAtServer is removed.
2012-06-24 17:40:59 -05:00
Marcel Holtmann 359f790c77 gatsyntax: Fix typo with GSM_PERMISSIVE_STATE_RESPONSE_STRING 2012-05-25 20:48:22 +02:00
Denis Kenzior 6cbcfb66b8 gatsyntax: Handle lines starting with '"' 2012-05-24 09:28:31 -05:00
Denis Kenzior 22294e80f6 gatutil: Use g_ascii_isprint instead of isprint 2012-01-11 14:31:45 -06:00
Denis Kenzior 8863e7e99a gsmdial: Set recording after ppp_open 2012-01-02 10:57:27 -06:00
Denis Kenzior 3d312e631b gsmdial: Make sure to use '#' at the end
The bluetooth path got this part wrong
2011-11-30 04:35:44 -06:00
Denis Kenzior a1010dd727 gatchat: Fix minor style issue 2011-11-14 20:11:39 -06:00
Denis Kenzior e0e151e88c gatchat: Minor style fixup 2011-11-07 12:27:51 -06:00
Denis Kenzior 74b8d2aa28 gatchat: Remove erroneous break statement 2011-11-07 12:27:18 -06:00
Oleg Zhurakivskyy 82ac630693 gatchat: Add IPv6 Control Protocol 2011-11-07 12:24:30 -06:00
Marcel Holtmann 21f9da9916 gatchat: Update copyright information 2011-10-10 13:39:25 -07:00
Denis Kenzior 2867bf724d gatserver: Add command finished callbacks 2011-08-15 00:25:27 -05:00
Denis Kenzior 6240b76294 gatserver: Fix not processing after async error
If we send an async error response, all future commands are ignored.
2011-08-14 23:18:05 -05:00
Denis Kenzior 665b2ea99e gatserver: Add sanity check 2011-08-14 23:11:20 -05:00
Denis Kenzior a897ed5e53 gatserver: Fix not sending OK final response 2011-08-14 23:11:03 -05:00
Denis Kenzior 5bd2b86ace gatserver: Refactor IO code
The current GAtServer implementation had nasty corner cases where
multiple commands were issued on the same command line.  The
server_suspend had no effect and we ended up processing the second
command anyway, resulting in interesting side-effects or crashes.

This commit simply discards the rest of the read input if the server
starts processing a command.  Since we do not yet support command
abortion we also discard data that arrives when command is being
processed.
2011-08-14 22:56:45 -05:00
Marcel Holtmann e266a5e220 gatchat: Fix marker handling within HDLC support 2011-08-09 20:00:58 -07:00
Marcel Holtmann 4dc66b9cb0 gatchat: Abort hexdump helper when no debug function is specified 2011-08-09 20:00:18 -07:00
Marcel Holtmann 6351cb1e4e gatchat: Fix extra empty line issue with hexdump helper 2011-08-09 19:23:33 -07:00
Marcel Holtmann e35a577f80 gatchat: Use hexdump format for HDLC debug messages 2011-08-09 19:18:14 -07:00
Marcel Holtmann 4b76ec7159 gatchat: Add utility function for hexdump debugs 2011-08-09 19:17:52 -07:00
Marcel Holtmann 5fea0c006a gatchat: Add support for sending HDLC frame start and end markers 2011-08-09 16:50:30 -07:00
Marcel Holtmann b996d34f2f gatchat: Fix minor whitespace mistake 2011-08-04 23:54:33 +02:00
Marcel Holtmann 73b711551c gatchat: Fix port settings and debugging for QCDM test tool 2011-07-26 16:02:24 +02:00
Marcel Holtmann 0f29c33c5b gatchat: Add helper for opening QCDM ports 2011-07-26 15:59:47 +02:00
Marcel Holtmann a58f01316b gatchat: Fix handling of HDLC debug output 2011-07-26 15:53:06 +02:00
Denis Kenzior 0471e3ec8d gatchat: Add terminator blacklisting 2011-07-25 03:44:56 +02:00
Denis Kenzior 329f2d724b gatserver: fix certain bad behavior
Due to the new GAtIO semantics, the receive function is called
immediately if the receive buffer is not empty.  This caused certain
funny behavior in non-command (e.g. empty, a/) processing.
2011-07-11 15:51:34 -05:00