BlackBerry 10 OS battery drain

Friday, January 14, 2022    Post   780 words   4 mins read
BlackBerry 10 OS battery drain

Due to the BlackBerry shutdown from January 4, 2022, the BlackBerry 10 OS devices seem to have a serious problem. I have a BlackBerry Passport on which I’m running some tests and lately I noticed a massive battery drain. Actually, I noticed the issue earlier but I couldn’t link it to the BlackBerry Services EOL from this year because I foolishly thought that BlackBerry would still keep the servers up or at least give the users an update that will remove any dependency on their servers. But they didn’t.

The problem is that the device is doing 3 requests per second to several external BlackBerry servers (that are now offline) and as you can imagine, this kills the battery really fast. I encountered the issue last year because I was using a custom blocklist on a Pi-hole and it blocked all blackberry.com and blackberry.net domains, but I wasn’t using the device as much as to notice the reduced battery life.

The servers the device is trying to connect to each second are:

  • <IP>.rcp.blackberry.com
  • xtra.gpsonextra.net
  • icc.blackberry.com

Where <IP> depends on your current location I guess. Additionally, the phone tries to connect to several other servers but those are normal requests that are not hammering the network connection:

  • cs.sl.blackberry.com
  • registration.blackberry.com
  • inet.registration.blackberry.com
  • cse.dcs.blackberry.com
  • cse.doc.blackberry.com

The xtra.gpsonextra.net request is from gpsd on the device for the GPS almanac from Qualcomm servers and that can be setup to be served from your router (if you have OpenWrt on it you can use nginx).

The only workaround currently is to turn off all Internet connections (Mobile and WiFi) on the device when you’re not using it or add a hosts entry to your router for blackberry.com to redirect all the requests to 127.0.0.1. Scratch that, even if you sinkhole the domains to an active IP the DNS lookups are still going strong. I guess that the server responses must be valid and signed for the requests to stop. Update: akshually, you can block the WiFi checker request (icc.blackberry.com) and the requests will calm down because the device won’t be able to detect that it’s connected to the Internet.

Since there is no root access on the device so that I can disable the affected service or add blackberry.com to /etc/hosts on the phone, I’m kinda stuck.

From the image to the right (click on it for extra info and clarity) you can see there are 8703 requests per hour (208872 per day, 8703 per hour, 145 per minute, 2.5 per second, says basic math); and about 2.1MB of extra network traffic per hour (you do the math for daily extra network traffic).

This issue reduces the battery time of my device (100% to 0%) from 4 days to about 20 hours, so yeah, it renders it kinda useless. Thanks Obama.

Device info

A BlackBerry Passport model SQW100-4 running BlackBerry OS 10.3.3.2137.

$ pidin info
CPU:ARM Release:8.0.0  FreeMem:1724MB/3072MB BootTime:Jan 14 16:33:08 2022
Processes: 3, Threads: 6
Processor1: 1362036465 QCT Krait (MP) 2265MHz FPU 
Processor2: 1362036465 QCT Krait (MP) 2265MHz FPU 
Processor3: 1362036465 QCT Krait (MP) 2265MHz FPU 
Processor4: 1362036465 QCT Krait (MP) 2265MHz FPU 
$ uname -a
QNX BLACKBERRY 8.0.0 2018/02/21-10:54:19EST MSM8974AA_ES1.1_PVS12SB1_WINDERMERE4ROW_Rev:05 armle
Environment variables: click for a big list
PATH=/base/bin:/base/usr/bin:/base/sbin:/base/usr/sbin:/base/usr/photon/bin:/base/scripts:/radio/bin:/radio/usr/bin:/radio/sbin:/radio/usr/sbin:/radio/scripts:/proc/boot:/base/bin:/base/sbin:/base/usr/bin:/base/usr/sbin
CS_BB_PROCESSOR_INFO=521
PLATFORM_PROCESSOR_INFO=PVS12SB1
HMI_REMOTE=FALSE
CS_BB_PLATFORM_FAMILY=522
PLATFORM_FAMILY=WINDERMERE4
QT_LIB_PATH=/base/usr/lib/qt4/lib
BOOT_LOADER=RIMBOOT
IFS_BOARD=qc8974-rimboot-secure
LIBC_STRINGS=krait_neon
STDIO_DEFAULT_BUFSIZE=8192
CS_BB_PLATFORM_VARIANT=523
PLATFORM_VARIANT=ROW
FLASHTMP=/tmp
CS_BB_PROCESSOR_REV=520
PLATFORM_PROCESSOR_REV=ES1.1
DISPLAY_ROOT=/base/usr/lib/display
QT_PLUGIN_PATH=/base/usr/lib/qt4/plugins
QML_IMPORT_PATH=/base/usr/lib/qt4/imports
FMCHP=bcm43xx
BASEFS=/base
PANEL_DRIVER_NAME=rim_msm_lcd
PLATFORM_VARIANT_LC=row
HDIFS0=hd1
RMNET_CONFIG_FILE=/radio/etc/rmnet_v3.conf
FONTCONFIG_FILE=/etc/fontconfig/fonts.conf
ADRENO=A330
SYSNAME=nto
PLATFORM_FAMILY_LC=windermere4
HDROOT=hd3
PYTHONHOME=/usr:/usr
PHKSCOPE=1
PLATFORM_CPU=MSM8974AA
RTC_OPTS=
CS_BB_PLATFORM_REV=524
PLATFORM_REV=05
PHOTON=/dev/photon
DISK_ALIMIT=65536
BMETRICS_NAME=launcher
HDBASE0=hd1t179
CS_BB_PROCESSOR=519
PLATFORM_PROCESSOR=MSM8974AA
OFFSET_IFS0=256
OPENWFD_LOG_DISABLE=1
CS_BB_PLATFORM=517
GRAPHICS_ROOT=/base/usr/lib/graphics/qc
TERM=ansi
MM_INIT=/base/lib/dll/mmedia
CPU=armle-v7
HDBASE1=hd2t179
PERSISTENCE_DATA=/
LOGDIR=/var/log
ASIC_PATH=asic_8974
uname_m=MSM8974AA_ES1.1_PVS12SB1_WINDERMERE4ROW_Rev:05
BOARD_CONFIG=factory_sfi_hybrid_qc8974
PLATFORM_LOWERCASE=windermere4row
DECKARD_DEBUG=0
LOCFILE=/usr/share/locale/locale.file
HMI_VOLUME_SCALE=50
LANG=C
PLATFORM_CLASS=phone
RADIOFS=/radio
MIN_VALID_DATE=200905010000.00
IFS_BOOT_ENV=yes
RTC_CLOCK_TYPE=
FLASH_FONT_CFG_PATH=/etc/system/config/flash-font.cfg
PERFTUNE_ENABLE_ANDROID_START=yes
PLATFORM=WINDERMERE4ROW
LD_LIBRARY_PATH=app/native/lib:/usr/lib/appserv
LIBIMG_CFGFILE=/etc/system/config/img.conf
BOARDFILE=/base/board.tdf
ROOTFS=/
PANEL_DRIVER_ROOT=/base/lib/
PHFONT=/dev/phfont
PHY_RAM_SIZE_KB=3145728
SRANDOM_FAILED=false
MIN_VALID_DATE_SEC=1241136000
DECKARD_DEBUG_SCRIPT=0
RTC_CLOCK_OPTS=
PPSDIR=/pps
CASCADES_THEME=default
NET_PPS_ROOT=/pps/services/networking
PERIMETER=personal
PERIMETER_HOME=/accounts/1000
ORIENTATION=0
ROTATION=top_up
WIDTH=1440
HEIGHT=1440
COVERWIDTH=440
COVERHEIGHT=486
DISPLAY_ID=1
DISPLAY_MODE=HH
DISPLAY_PROXIMITY=LOCAL
WINDOW_TYPE=main
AUTOORIENTS=auto
Mount points: click for a big list
/dev/emmc/user0 on / type qnx6 
/dev/emmc/cal_work0 on /efs type qnx6 
none on /accounts/1000/appserv/sys.cfs.webdav.todtm.gYABgGnToZvN4bqMB3xslfel.KU/fs/mounts type BB_CFS 
/apps/sys.data.wallpaper.gYABgJqi6F824h1CwDnH9pryMe8/assets/data/fs1.rcfs on /accounts/1000/shared/protected_media/wallpaper type rcfs 
/var/pps on /pps type PPS 
/dev/emmc/radio0t178 on /radio type rcfs 
/dev/emmc/os1t179 on /base type rcfs 
/apps/sys.data.carrier_data.gYABgFiOnv5T7QQvS74H_qL5stg/assets/data/fs1.rcfs on /base/etc/carrier/config type rcfs 
/apps/sys.data.carrier_data.gYABgFiOnv5T7QQvS74H_qL5stg/assets/data/fs2.rcfs on /base/etc/carrier/mep type rcfs 
/apps/sys.data.carrier_data.gYABgFiOnv5T7QQvS74H_qL5stg/assets/data/fs3.rcfs on /base/etc/carrier/ids type rcfs 
/apps/sys.data.carrier_data.gYABgFiOnv5T7QQvS74H_qL5stg/assets/data/fs4.rcfs on /base/etc/authman/subsystem type rcfs 
/apps/sys.data.bluetooth.gYABgHTs_tbaCB5.6V55lUrP8bk/assets/data/fs1.rcfs on /base/usr/bluetooth type rcfs 
/apps/sys.data.asr.gYABgNzxt6KZ7gbNXbjARmvTBx0/assets/data/fs1.rcfs on /base/usr/asr/prompt type rcfs 
/apps/sys.data.asr.gYABgNzxt6KZ7gbNXbjARmvTBx0/assets/data/fs2.rcfs on /base/usr/asr/conversation type rcfs 
/apps/sys.data.asr.gYABgNzxt6KZ7gbNXbjARmvTBx0/assets/data/fs3.rcfs on /base/usr/asr/recognition type rcfs 
/apps/sys.data.carrier_data.gYABgFiOnv5T7QQvS74H_qL5stg/assets/data/fs5.rcfs on /base/usr/carrier type rcfs 
/apps/sys.data.zoneinfo.gYABgKteb7ShzweoQQz9fJANd54/assets/data/fs1.rcfs on /base/usr/share/zoneinfo type rcfs 
/apps/sys.data.zoneinfo.gYABgKteb7ShzweoQQz9fJANd54/assets/data/fs2.rcfs on /base/usr/share/icu/icudt49l type rcfs 

Graphs

I fully charged the phone’s battery, restarted it and enabled WiFi on Saturday at 09:00 and by Sunday 06:00 it was discharged. During this time the phone was idle and in a default state with no additional applications. You will notice from the graphs when was the moment I turned on the WiFi connection.