Read a palindrome of unknown length
free(pStr) is misplaced. Once it is freed, you may not touch it anymore. Calling check_palindrome2(pStr) after freeing causes an undefined behavior.

Consider

    int rc = check_palindrome2(pStr, i);
    free(pStr);
    return rc;

check_palindrome2 could be called with a null pointer, but doesn't test it.
current_size += len_max is more clear than current_size = i+len_max.
read_palindrome is a misnomer. It doesn't read a palindrome. It reads a string of an unknown length. Now, SRP mandates splitting it into independent read_line and is_palindrome functions.
You test malloc for a failure. Keep in mind that realloc may fail as well.

    char * tmp = realloc(....);
    if (tmp == NULL) {
        free(pStr);
        return error;
    }
    pStr = tmp;


NB: a simple pStr = realloc(....) is not good. If realloc fails, you'd have a memory leak.