Skip to content

Commit 6b91731

Browse files
committed
fix potential out-of-bound access in sytrf_aa_2stage
1 parent a7738e1 commit 6b91731

File tree

6 files changed

+91
-63
lines changed

6 files changed

+91
-63
lines changed

SRC/chetrf_aa_2stage.f

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -453,14 +453,17 @@ SUBROUTINE CHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
453453
* > Apply pivots to previous columns of L
454454
CALL CSWAP( K-1, A( (J+1)*NB+1, I1 ), 1,
455455
$ A( (J+1)*NB+1, I2 ), 1 )
456-
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
457-
CALL CSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
458-
$ A( I1+1, I2 ), 1 )
459-
CALL CLACGV( I2-I1, A( I1, I1+1 ), LDA )
460-
CALL CLACGV( I2-I1-1, A( I1+1, I2 ), 1 )
456+
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
457+
IF( I2.GT.(I1+1) ) THEN
458+
CALL CSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
459+
$ A( I1+1, I2 ), 1 )
460+
CALL CLACGV( I2-I1, A( I1, I1+1 ), LDA )
461+
CALL CLACGV( I2-I1-1, A( I1+1, I2 ), 1 )
462+
END IF
461463
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
462-
CALL CSWAP( N-I2, A( I1, I2+1 ), LDA,
463-
$ A( I2, I2+1 ), LDA )
464+
IF( I2.LT.N )
465+
$ CALL CSWAP( N-I2, A( I1, I2+1 ), LDA,
466+
$ A( I2, I2+1 ), LDA )
464467
* > Swap A(I1, I1) with A(I2, I2)
465468
PIV = A( I1, I1 )
466469
A( I1, I1 ) = A( I2, I2 )
@@ -631,13 +634,16 @@ SUBROUTINE CHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
631634
CALL CSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA,
632635
$ A( I2, (J+1)*NB+1 ), LDA )
633636
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
634-
CALL CSWAP( I2-I1-1, A( I1+1, I1 ), 1,
635-
$ A( I2, I1+1 ), LDA )
636-
CALL CLACGV( I2-I1, A( I1+1, I1 ), 1 )
637-
CALL CLACGV( I2-I1-1, A( I2, I1+1 ), LDA )
637+
IF( I2.GT.(I1+1) ) THEN
638+
CALL CSWAP( I2-I1-1, A( I1+1, I1 ), 1,
639+
$ A( I2, I1+1 ), LDA )
640+
CALL CLACGV( I2-I1, A( I1+1, I1 ), 1 )
641+
CALL CLACGV( I2-I1-1, A( I2, I1+1 ), LDA )
642+
END IF
638643
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
639-
CALL CSWAP( N-I2, A( I2+1, I1 ), 1,
640-
$ A( I2+1, I2 ), 1 )
644+
IF( I2.LT.N )
645+
$ CALL CSWAP( N-I2, A( I2+1, I1 ), 1,
646+
$ A( I2+1, I2 ), 1 )
641647
* > Swap A(I1, I1) with A(I2, I2)
642648
PIV = A( I1, I1 )
643649
A( I1, I1 ) = A( I2, I2 )

SRC/csytrf_aa_2stage.f

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -448,12 +448,14 @@ SUBROUTINE CSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
448448
* > Apply pivots to previous columns of L
449449
CALL CSWAP( K-1, A( (J+1)*NB+1, I1 ), 1,
450450
$ A( (J+1)*NB+1, I2 ), 1 )
451-
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
452-
CALL CSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
453-
$ A( I1+1, I2 ), 1 )
451+
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
452+
IF( I2.GT.(I1+1) )
453+
$ CALL CSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
454+
$ A( I1+1, I2 ), 1 )
454455
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
455-
CALL CSWAP( N-I2, A( I1, I2+1 ), LDA,
456-
$ A( I2, I2+1 ), LDA )
456+
IF( I2.LT.N )
457+
$ CALL CSWAP( N-I2, A( I1, I2+1 ), LDA,
458+
$ A( I2, I2+1 ), LDA )
457459
* > Swap A(I1, I1) with A(I2, I2)
458460
PIV = A( I1, I1 )
459461
A( I1, I1 ) = A( I2, I2 )
@@ -637,11 +639,13 @@ SUBROUTINE CSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
637639
CALL CSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA,
638640
$ A( I2, (J+1)*NB+1 ), LDA )
639641
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
640-
CALL CSWAP( I2-I1-1, A( I1+1, I1 ), 1,
641-
$ A( I2, I1+1 ), LDA )
642+
IF( I2.GT.(I1+1) )
643+
$ CALL CSWAP( I2-I1-1, A( I1+1, I1 ), 1,
644+
$ A( I2, I1+1 ), LDA )
642645
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
643-
CALL CSWAP( N-I2, A( I2+1, I1 ), 1,
644-
$ A( I2+1, I2 ), 1 )
646+
IF( I2.LT.N )
647+
$ CALL CSWAP( N-I2, A( I2+1, I1 ), 1,
648+
$ A( I2+1, I2 ), 1 )
645649
* > Swap A(I1, I1) with A(I2, I2)
646650
PIV = A( I1, I1 )
647651
A( I1, I1 ) = A( I2, I2 )

SRC/dsytrf_aa_2stage.f

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -442,12 +442,14 @@ SUBROUTINE DSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
442442
* > Apply pivots to previous columns of L
443443
CALL DSWAP( K-1, A( (J+1)*NB+1, I1 ), 1,
444444
$ A( (J+1)*NB+1, I2 ), 1 )
445-
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
446-
CALL DSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
447-
$ A( I1+1, I2 ), 1 )
445+
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
446+
IF( I2.GT.(I1+1) )
447+
$ CALL DSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
448+
$ A( I1+1, I2 ), 1 )
448449
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
449-
CALL DSWAP( N-I2, A( I1, I2+1 ), LDA,
450-
$ A( I2, I2+1 ), LDA )
450+
IF( I2.LT.N )
451+
$ CALL DSWAP( N-I2, A( I1, I2+1 ), LDA,
452+
$ A( I2, I2+1 ), LDA )
451453
* > Swap A(I1, I1) with A(I2, I2)
452454
PIV = A( I1, I1 )
453455
A( I1, I1 ) = A( I2, I2 )
@@ -616,11 +618,13 @@ SUBROUTINE DSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
616618
CALL DSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA,
617619
$ A( I2, (J+1)*NB+1 ), LDA )
618620
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
619-
CALL DSWAP( I2-I1-1, A( I1+1, I1 ), 1,
620-
$ A( I2, I1+1 ), LDA )
621+
IF( I2.GT.(I1+1) )
622+
$ CALL DSWAP( I2-I1-1, A( I1+1, I1 ), 1,
623+
$ A( I2, I1+1 ), LDA )
621624
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
622-
CALL DSWAP( N-I2, A( I2+1, I1 ), 1,
623-
$ A( I2+1, I2 ), 1 )
625+
IF( I2.LT.N )
626+
$ CALL DSWAP( N-I2, A( I2+1, I1 ), 1,
627+
$ A( I2+1, I2 ), 1 )
624628
* > Swap A(I1, I1) with A(I2, I2)
625629
PIV = A( I1, I1 )
626630
A( I1, I1 ) = A( I2, I2 )

SRC/ssytrf_aa_2stage.f

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -442,12 +442,14 @@ SUBROUTINE SSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
442442
* > Apply pivots to previous columns of L
443443
CALL SSWAP( K-1, A( (J+1)*NB+1, I1 ), 1,
444444
$ A( (J+1)*NB+1, I2 ), 1 )
445-
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
446-
CALL SSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
447-
$ A( I1+1, I2 ), 1 )
445+
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
446+
IF( I2.GT.(I1+1) )
447+
$ CALL SSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
448+
$ A( I1+1, I2 ), 1 )
448449
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
449-
CALL SSWAP( N-I2, A( I1, I2+1 ), LDA,
450-
$ A( I2, I2+1 ), LDA )
450+
IF( I2.LT.N )
451+
$ CALL SSWAP( N-I2, A( I1, I2+1 ), LDA,
452+
$ A( I2, I2+1 ), LDA )
451453
* > Swap A(I1, I1) with A(I2, I2)
452454
PIV = A( I1, I1 )
453455
A( I1, I1 ) = A( I2, I2 )
@@ -616,11 +618,13 @@ SUBROUTINE SSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
616618
CALL SSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA,
617619
$ A( I2, (J+1)*NB+1 ), LDA )
618620
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
619-
CALL SSWAP( I2-I1-1, A( I1+1, I1 ), 1,
620-
$ A( I2, I1+1 ), LDA )
621+
IF( I2.GT.(I1+1) )
622+
$ CALL SSWAP( I2-I1-1, A( I1+1, I1 ), 1,
623+
$ A( I2, I1+1 ), LDA )
621624
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
622-
CALL SSWAP( N-I2, A( I2+1, I1 ), 1,
623-
$ A( I2+1, I2 ), 1 )
625+
IF( I2.LT.N )
626+
$ CALL SSWAP( N-I2, A( I2+1, I1 ), 1,
627+
$ A( I2+1, I2 ), 1 )
624628
* > Swap A(I1, I1) with A(I2, I2)
625629
PIV = A( I1, I1 )
626630
A( I1, I1 ) = A( I2, I2 )

SRC/zhetrf_aa_2stage.f

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -452,14 +452,17 @@ SUBROUTINE ZHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
452452
* > Apply pivots to previous columns of L
453453
CALL ZSWAP( K-1, A( (J+1)*NB+1, I1 ), 1,
454454
$ A( (J+1)*NB+1, I2 ), 1 )
455-
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
456-
CALL ZSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
457-
$ A( I1+1, I2 ), 1 )
458-
CALL ZLACGV( I2-I1, A( I1, I1+1 ), LDA )
459-
CALL ZLACGV( I2-I1-1, A( I1+1, I2 ), 1 )
455+
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
456+
IF( I2.GT.(I1+1) ) THEN
457+
CALL ZSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
458+
$ A( I1+1, I2 ), 1 )
459+
CALL ZLACGV( I2-I1, A( I1, I1+1 ), LDA )
460+
CALL ZLACGV( I2-I1-1, A( I1+1, I2 ), 1 )
461+
END IF
460462
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
461-
CALL ZSWAP( N-I2, A( I1, I2+1 ), LDA,
462-
$ A( I2, I2+1 ), LDA )
463+
IF( I2.LT.N )
464+
$ CALL ZSWAP( N-I2, A( I1, I2+1 ), LDA,
465+
$ A( I2, I2+1 ), LDA )
463466
* > Swap A(I1, I1) with A(I2, I2)
464467
PIV = A( I1, I1 )
465468
A( I1, I1 ) = A( I2, I2 )
@@ -629,14 +632,17 @@ SUBROUTINE ZHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
629632
* > Apply pivots to previous columns of L
630633
CALL ZSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA,
631634
$ A( I2, (J+1)*NB+1 ), LDA )
632-
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
633-
CALL ZSWAP( I2-I1-1, A( I1+1, I1 ), 1,
634-
$ A( I2, I1+1 ), LDA )
635-
CALL ZLACGV( I2-I1, A( I1+1, I1 ), 1 )
636-
CALL ZLACGV( I2-I1-1, A( I2, I1+1 ), LDA )
635+
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
636+
IF( I2.GT.(I1+1) ) THEN
637+
CALL ZSWAP( I2-I1-1, A( I1+1, I1 ), 1,
638+
$ A( I2, I1+1 ), LDA )
639+
CALL ZLACGV( I2-I1, A( I1+1, I1 ), 1 )
640+
CALL ZLACGV( I2-I1-1, A( I2, I1+1 ), LDA )
641+
END IF
637642
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
638-
CALL ZSWAP( N-I2, A( I2+1, I1 ), 1,
639-
$ A( I2+1, I2 ), 1 )
643+
IF( I2.LT.N )
644+
$ CALL ZSWAP( N-I2, A( I2+1, I1 ), 1,
645+
$ A( I2+1, I2 ), 1 )
640646
* > Swap A(I1, I1) with A(I2, I2)
641647
PIV = A( I1, I1 )
642648
A( I1, I1 ) = A( I2, I2 )

SRC/zsytrf_aa_2stage.f

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -448,12 +448,14 @@ SUBROUTINE ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
448448
* > Apply pivots to previous columns of L
449449
CALL ZSWAP( K-1, A( (J+1)*NB+1, I1 ), 1,
450450
$ A( (J+1)*NB+1, I2 ), 1 )
451-
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
452-
CALL ZSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
453-
$ A( I1+1, I2 ), 1 )
451+
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
452+
IF( I2.GT.(I1+1) )
453+
$ CALL ZSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
454+
$ A( I1+1, I2 ), 1 )
454455
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
455-
CALL ZSWAP( N-I2, A( I1, I2+1 ), LDA,
456-
$ A( I2, I2+1 ), LDA )
456+
IF( I2.LT.N )
457+
$ CALL ZSWAP( N-I2, A( I1, I2+1 ), LDA,
458+
$ A( I2, I2+1 ), LDA )
457459
* > Swap A(I1, I1) with A(I2, I2)
458460
PIV = A( I1, I1 )
459461
A( I1, I1 ) = A( I2, I2 )
@@ -637,11 +639,13 @@ SUBROUTINE ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
637639
CALL ZSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA,
638640
$ A( I2, (J+1)*NB+1 ), LDA )
639641
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
640-
CALL ZSWAP( I2-I1-1, A( I1+1, I1 ), 1,
641-
$ A( I2, I1+1 ), LDA )
642+
IF( I2.GT.(I1+1) )
643+
$ CALL ZSWAP( I2-I1-1, A( I1+1, I1 ), 1,
644+
$ A( I2, I1+1 ), LDA )
642645
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
643-
CALL ZSWAP( N-I2, A( I2+1, I1 ), 1,
644-
$ A( I2+1, I2 ), 1 )
646+
IF( I2.LT.N )
647+
$ CALL ZSWAP( N-I2, A( I2+1, I1 ), 1,
648+
$ A( I2+1, I2 ), 1 )
645649
* > Swap A(I1, I1) with A(I2, I2)
646650
PIV = A( I1, I1 )
647651
A( I1, I1 ) = A( I2, I2 )

0 commit comments

Comments
 (0)