Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96fbe3c2 authored by Marco Nelissen's avatar Marco Nelissen Committed by android-build-merger
Browse files

Merge "Fix overflow check and check read result" into klp-dev am: b6aa3901...

Merge "Fix overflow check and check read result" into klp-dev am: b6aa3901 am: e541fa17 am: 7f3980c0 am: ea202340 am: 3fc94bc1 am: 497f2ccc am: 91703373 am: 3b122332 am: 89cbb848
am: 3ce7b4dd

Change-Id: I3d6ab417df4d0b58ebb8a0df4e5344d2cdf2d2c0
parents 199f36c9 3ce7b4dd
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -241,14 +241,11 @@ status_t BnHDCP::onTransact(
        case HDCP_ENCRYPT:
        {
            size_t size = data.readInt32();
            size_t bufSize = 2 * size;

            // watch out for overflow
            void *inData = NULL;
            if (bufSize > size) {
                inData = malloc(bufSize);
            // watch out for overflow
            if (size <= SIZE_MAX / 2) {
                inData = malloc(2 * size);
            }

            if (inData == NULL) {
                reply->writeInt32(ERROR_OUT_OF_RANGE);
                return OK;
@@ -256,11 +253,16 @@ status_t BnHDCP::onTransact(

            void *outData = (uint8_t *)inData + size;

            data.read(inData, size);
            status_t err = data.read(inData, size);
            if (err != OK) {
                free(inData);
                reply->writeInt32(err);
                return OK;
            }

            uint32_t streamCTR = data.readInt32();
            uint64_t inputCTR;
            status_t err = encrypt(inData, size, streamCTR, &inputCTR, outData);
            err = encrypt(inData, size, streamCTR, &inputCTR, outData);

            reply->writeInt32(err);