diff --git a/.travis.yml b/.travis.yml
index a9d1036dae9f924cb0d98d622c3c719d5ed961b9..425ff8b4fe329b5428c2fec73c920e0750922df7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -49,6 +49,8 @@ matrix:
         env: OS=ubuntu DIST=artful
       - name: Ubuntu Bionic (18.04) build + deploy DEB
         env: OS=ubuntu DIST=bionic
+      - name: Ubuntu Cosmic (18.10) build + deploy DEB
+        env: OS=ubuntu DIST=cosmic
       - name: Debian Wheezy (7) build + deploy DEB
         env: OS=debian DIST=wheezy
       - name: Debian Jessie (8) build + deploy DEB
diff --git a/src/box/lua/session.c b/src/box/lua/session.c
index 4542d59eca08bfa3b1de6d8d25b214da235b6165..d3d27643fde153c9c37f606d2f5cb8280bd749b0 100644
--- a/src/box/lua/session.c
+++ b/src/box/lua/session.c
@@ -369,15 +369,15 @@ static int
 lbox_session_push(struct lua_State *L)
 {
 	struct session *session = current_session();
-	int ok;
 	uint64_t sync;
 	switch(lua_gettop(L)) {
 	case 1:
 		sync = session_sync(session);
 		break;
 	case 2:
-		sync = lua_tointegerx(L, 2, &ok);
-		if (ok != 0) {
+		sync = luaL_touint64(L, 2);
+		if (sync != 0 || (lua_isnumber(L, 2) &&
+				  lua_tonumber(L, 2) == 0)) {
 			lua_pop(L, 1);
 			break;
 		}
diff --git a/test/app-tap/console.test.lua b/test/app-tap/console.test.lua
index 1c76072aa6513c7fcfdf7ce618973cfc2f82064c..4f915afd73a5d77bcf2ed01e34bd82054e9740b1 100755
--- a/test/app-tap/console.test.lua
+++ b/test/app-tap/console.test.lua
@@ -21,7 +21,7 @@ local EOL = "\n...\n"
 
 test = tap.test("console")
 
-test:plan(57)
+test:plan(59)
 
 -- Start console and connect to it
 local server = console.listen(CONSOLE_SOCKET)
@@ -39,6 +39,14 @@ test:is(client:read(EOL), '%TAG !push! tag:tarantool.io/push,2018\n--- 200\n...\
         "pushed message")
 test:is(client:read(EOL), '---\n- true\n...\n', "pushed message")
 
+--
+-- gh-3790: box.session.push support uint64_t sync.
+--
+client:write('box.session.push(1, 9223372036854775808ULL)\n')
+test:is(client:read(EOL), '%TAG !push! tag:tarantool.io/push,2018\n--- 1\n...\n',
+        "pushed message")
+test:is(client:read(EOL), '---\n- true\n...\n', "pushed message")
+
 -- Execute some command
 client:write("1\n")
 test:is(yaml.decode(client:read(EOL))[1], 1, "eval")