An integer underflow vulnerability exists in the nextstate() function in gpsd/packet.c of gpsd versions prior to commit ffa1d6f40bca0b035fc7f5e563160ebb67199da7. When parsing a NAVCOM packet, the payload length is calculated using lexer->length = (size_t)c - 4 without checking if the input byte c is less than 4. This results in an unsigned integer underflow, setting lexer->length to a very large value (near SIZE_MAX). The parser then enters a loop attempting to consume this massive number of bytes, causing 100% CPU utilization and a Denial of Service (DoS) condition.
{
"binaries": [
{
"binary_name": "gpsd",
"binary_version": "3.15-2build1"
},
{
"binary_name": "gpsd-clients",
"binary_version": "3.15-2build1"
},
{
"binary_name": "libgps-dev",
"binary_version": "3.15-2build1"
},
{
"binary_name": "libgps22",
"binary_version": "3.15-2build1"
},
{
"binary_name": "libqgpsmm-dev",
"binary_version": "3.15-2build1"
},
{
"binary_name": "libqgpsmm22",
"binary_version": "3.15-2build1"
},
{
"binary_name": "python-gps",
"binary_version": "3.15-2build1"
}
]
}{
"binaries": [
{
"binary_name": "gpsd",
"binary_version": "3.17-5"
},
{
"binary_name": "gpsd-clients",
"binary_version": "3.17-5"
},
{
"binary_name": "libgps-dev",
"binary_version": "3.17-5"
},
{
"binary_name": "libgps23",
"binary_version": "3.17-5"
},
{
"binary_name": "libqgpsmm-dev",
"binary_version": "3.17-5"
},
{
"binary_name": "libqgpsmm23",
"binary_version": "3.17-5"
},
{
"binary_name": "python-gps",
"binary_version": "3.17-5"
}
]
}{
"binaries": [
{
"binary_name": "gpsd",
"binary_version": "3.20-8ubuntu0.4"
},
{
"binary_name": "gpsd-clients",
"binary_version": "3.20-8ubuntu0.4"
},
{
"binary_name": "libgps-dev",
"binary_version": "3.20-8ubuntu0.4"
},
{
"binary_name": "libgps26",
"binary_version": "3.20-8ubuntu0.4"
},
{
"binary_name": "libqgpsmm-dev",
"binary_version": "3.20-8ubuntu0.4"
},
{
"binary_name": "libqgpsmm26",
"binary_version": "3.20-8ubuntu0.4"
},
{
"binary_name": "python3-gps",
"binary_version": "3.20-8ubuntu0.4"
}
]
}{
"availability": "No subscription required",
"binaries": [
{
"binary_name": "gpsd",
"binary_version": "3.22-4ubuntu2.1"
},
{
"binary_name": "gpsd-clients",
"binary_version": "3.22-4ubuntu2.1"
},
{
"binary_name": "gpsd-tools",
"binary_version": "3.22-4ubuntu2.1"
},
{
"binary_name": "libgps-dev",
"binary_version": "3.22-4ubuntu2.1"
},
{
"binary_name": "libgps28",
"binary_version": "3.22-4ubuntu2.1"
},
{
"binary_name": "libqgpsmm-dev",
"binary_version": "3.22-4ubuntu2.1"
},
{
"binary_name": "libqgpsmm28",
"binary_version": "3.22-4ubuntu2.1"
},
{
"binary_name": "python3-gps",
"binary_version": "3.22-4ubuntu2.1"
}
]
}{
"availability": "No subscription required",
"binaries": [
{
"binary_name": "gpsd",
"binary_version": "3.25-3ubuntu3.2"
},
{
"binary_name": "gpsd-clients",
"binary_version": "3.25-3ubuntu3.2"
},
{
"binary_name": "gpsd-tools",
"binary_version": "3.25-3ubuntu3.2"
},
{
"binary_name": "libgps-dev",
"binary_version": "3.25-3ubuntu3.2"
},
{
"binary_name": "libgps30t64",
"binary_version": "3.25-3ubuntu3.2"
},
{
"binary_name": "libqgpsmm-dev",
"binary_version": "3.25-3ubuntu3.2"
},
{
"binary_name": "libqgpsmm30t64",
"binary_version": "3.25-3ubuntu3.2"
},
{
"binary_name": "python3-gps",
"binary_version": "3.25-3ubuntu3.2"
}
]
}{
"availability": "No subscription required",
"binaries": [
{
"binary_name": "gpsd",
"binary_version": "3.25-5ubuntu1.25.10.1"
},
{
"binary_name": "gpsd-clients",
"binary_version": "3.25-5ubuntu1.25.10.1"
},
{
"binary_name": "gpsd-tools",
"binary_version": "3.25-5ubuntu1.25.10.1"
},
{
"binary_name": "libgps-dev",
"binary_version": "3.25-5ubuntu1.25.10.1"
},
{
"binary_name": "libgps30t64",
"binary_version": "3.25-5ubuntu1.25.10.1"
},
{
"binary_name": "libqgpsmm-dev",
"binary_version": "3.25-5ubuntu1.25.10.1"
},
{
"binary_name": "libqgpsmm30t64",
"binary_version": "3.25-5ubuntu1.25.10.1"
},
{
"binary_name": "python3-gps",
"binary_version": "3.25-5ubuntu1.25.10.1"
}
]
}